Udostępnij za pośrednictwem


Łączenie aplikacji w systemie Android

W tym przewodniku omówiono, jak system Android 6.0 obsługuje łączenie aplikacji, technikę umożliwiającą aplikacjom mobilnym reagowanie na adresy URL w witrynach internetowych. Omówi on, czym jest łączenie aplikacji, jak zaimplementować łączenie aplikacji w aplikacji systemu Android 6.0 oraz jak skonfigurować witrynę internetową w celu udzielenia uprawnień do aplikacji mobilnej dla domeny.

Omówienie łączenia aplikacji

Aplikacje mobilne nie żyją już w silosie — w wielu przypadkach są ważnymi składnikami swoich firm wraz z witryną internetową. Pożądane jest, aby firmy bezproblemowo łączyły swoją obecność w Internecie i aplikacje mobilne z linkami w witrynie internetowej uruchamiającej aplikacje mobilne i wyświetlając odpowiednią zawartość w aplikacji mobilnej. Łączenie aplikacji (nazywane również łączeniem głębokim) to jedna z technik, która umożliwia urządzeniu przenośnemu odpowiadanie na identyfikator URI i uruchamianie aplikacji mobilnej odpowiadającej identyfikatorowi URI.

System Android obsługuje łączenie aplikacji za pośrednictwem systemu intencji — gdy użytkownik kliknie link w przeglądarce mobilnej, przeglądarka mobilna wyśle intencję, którą system Android deleguje do zarejestrowanej aplikacji. Na przykład kliknięcie linku w witrynie internetowej do gotowania spowoduje otwarcie aplikacji mobilnej skojarzonej z tą witryną internetową i wyświetlenie konkretnego przepisu dla użytkownika. Jeśli istnieje więcej niż jedna aplikacja zarejestrowana do obsługi tej intencji, system Android zgłosi to, co jest znane jako okno dialogowe uściślania, które poprosi użytkownika o wybranie aplikacji, która powinna obsługiwać intencję, na przykład:

Example screenshot of a disambiguation dialog

System Android 6.0 usprawnia tę funkcję przy użyciu automatycznej obsługi linków. System Android może automatycznie zarejestrować aplikację jako domyślną procedurę obsługi identyfikatora URI — aplikacja zostanie automatycznie uruchomiona i przejdzie bezpośrednio do odpowiedniego działania. Sposób, w jaki system Android 6.0 decyduje się na obsługę kliknięcia identyfikatora URI, zależy od następujących kryteriów:

  1. Istniejąca aplikacja jest już skojarzona z identyfikatorem URI — użytkownik mógł już skojarzyć istniejącą aplikację z identyfikatorem URI. W takim przypadku system Android będzie nadal korzystać z tej aplikacji.
  2. Żadna istniejąca aplikacja nie jest skojarzona z identyfikatorem URI, ale jest zainstalowana aplikacja pomocnicza — w tym scenariuszu użytkownik nie określił istniejącej aplikacji, więc system Android będzie używać zainstalowanej aplikacji pomocniczej do obsługi żądania.
  3. Żadna istniejąca aplikacja nie jest skojarzona z identyfikatorem URI, ale zainstalowano wiele aplikacji pomocniczych — ponieważ istnieje wiele aplikacji obsługujących identyfikator URI, zostanie wyświetlone okno dialogowe uściślania i użytkownik musi wybrać, która aplikacja będzie obsługiwać identyfikator URI.

Jeśli użytkownik nie ma zainstalowanych aplikacji, które obsługują identyfikator URI, a następnie jest zainstalowany, system Android ustawi aplikację jako domyślną procedurę obsługi identyfikatora URI po zweryfikowaniu skojarzenia z witryną internetową skojarzoną z identyfikatorem URI.

W tym przewodniku omówiono sposób konfigurowania aplikacji systemu Android 6.0 oraz sposobu tworzenia i publikowania pliku linków do zasobów cyfrowych w celu obsługi łączenia aplikacji w systemie Android 6.0.

Wymagania

Ten przewodnik wymaga platformy Xamarin.Android 6.1 i aplikacji przeznaczonej dla systemu Android 6.0 (poziom 23 interfejsu API) lub nowszej.

Łączenie aplikacji jest możliwe we wcześniejszych wersjach systemu Android przy użyciu pakietu NuGet Rivets z magazynu składników Xamarin. Pakiet Rivets nie jest zgodny z łączeniem aplikacji w systemie Android 6.0; nie obsługuje łączenia aplikacji systemu Android 6.0.

Konfigurowanie łączenia aplikacji w systemie Android 6.0

Konfigurowanie linków aplikacji w systemie Android 6.0 obejmuje dwa główne kroki:

  1. Dodawanie co najmniej jednego filtru intencji dla identyfikatora URI witryny internetowej — filtry intencji prowadzą system Android w sposób obsługi kliknięcia adresu URL w przeglądarce mobilnej.
  2. Publikowanie pliku JSON linków zasobów cyfrowych w witrynie internetowej — jest to plik przekazany do witryny internetowej i jest używany przez system Android do weryfikowania relacji między aplikacją mobilną a domeną witryny internetowej. Bez tego system Android nie może zainstalować aplikacji jako domyślnego uchwytu dla identyfikatorów URI; użytkownik musi to zrobić ręcznie.

Konfigurowanie filtru intencji

Należy skonfigurować filtr intencji mapujący identyfikator URI (lub możliwy zestaw identyfikatorów URI) z witryny internetowej na działanie w aplikacji systemu Android. W środowisku Xamarin.Android ta relacja jest ustanawiana przezadorowanie działania za pomocą atrybutu IntentFilterAttribute. Filtr intencji musi zadeklarować następujące informacje:

  • Intent.ActionView — Spowoduje to zarejestrowanie filtru intencji w celu odpowiadania na żądania wyświetlania informacji
  • Categories— Filtr intencji powinien zarejestrować zarówno Intent.CategoryBrowsable, jak i Intent.CategoryDefault, aby móc prawidłowo obsługiwać identyfikator URI sieci Web.
  • DataScheme — Filtr intencji musi zadeklarować http i/lub https. Są to jedyne dwa prawidłowe schematy.
  • DataHost — Jest to domena, z której pochodzą identyfikatory URI.
  • DataPathPrefix — Jest to opcjonalna ścieżka do zasobów w witrynie internetowej.
  • AutoVerify — Atrybut autoVerify informuje system Android o zweryfikowaniu relacji między aplikacją a witryną internetową. Zostanie to omówione bardziej poniżej.

W poniższym przykładzie pokazano, jak używać atrybutu IntentFilterAttribute do obsługi linków z i z https://www.recipe-app.com/recipeshttp://www.recipe-app.com/recipeselementu :

[IntentFilter(new [] { Intent.ActionView },
              Categories = new[] { Intent.CategoryBrowsable, Intent.CategoryDefault },
              DataScheme = "http",
              DataHost = "recipe-app.com",
              DataPathPrefix = "/recipe",
              AutoVerify=true)]
public class RecipeActivity : Activity
{
    // Code for the activity omitted
}

System Android zweryfikuje każdy host, który jest identyfikowany przez filtry intencji względem pliku zasobów cyfrowych w witrynie internetowej przed zarejestrowaniem aplikacji jako domyślnej procedury obsługi identyfikatora URI. Wszystkie filtry intencji muszą przejść weryfikację, zanim system Android będzie mógł ustanowić aplikację jako domyślną procedurę obsługi.

Łączenie aplikacji systemu Android 6.0 wymaga, aby system Android zweryfikował skojarzenie między aplikacją a witryną internetową przed ustawieniem aplikacji jako domyślnej procedury obsługi identyfikatora URI. Ta weryfikacja zostanie wykonana po pierwszym zainstalowaniu aplikacji. Plik linków do zasobów cyfrowych to plik JSON, który jest hostowany przez odpowiednie domeny internetowe.

Uwaga

Atrybut android:autoVerify musi być ustawiony przez filtr intencji — w przeciwnym razie system Android nie wykona weryfikacji.

Plik jest umieszczany przez administratora domeny w lokalizacji https://domain/.well-known/assetlinks.json.

Plik zasobu cyfrowego zawiera metadane niezbędne dla systemu Android do zweryfikowania skojarzenia. Plik assetlinks.json zawiera następujące pary klucz-wartość:

  • namespace — przestrzeń nazw aplikacji systemu Android.
  • package_name — nazwa pakietu aplikacji systemu Android (zadeklarowana w manifeście aplikacji).
  • sha256_cert_fingerprints – odciski palców SHA256 podpisanej aplikacji. Aby uzyskać więcej informacji na temat uzyskiwania odcisku palca SHA256 aplikacji, zobacz przewodnik Znajdowanie podpisu magazynu kluczy.

Poniższy fragment kodu to przykład assetlinks.json z jedną aplikacją na liście:

[
   {
      "relation": [
         "delegate_permission/common.handle_all_urls"
      ],
      "target": {
         "namespace": "android_app",
         "package_name": "com.example",
         "sha256_cert_fingerprints": [
            "14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64:16:A0:83:42:E6:1D:BE:A8:8A:04:96:B2:3F:CF:44:E5"
         ]
      }
   }
]

Istnieje możliwość zarejestrowania więcej niż jednego odcisku palca SHA256 w celu obsługi różnych wersji lub kompilacji aplikacji. Następny plik assetlinks.json to przykład rejestrowania wielu aplikacji:

[
   {
      "relation": [
         "delegate_permission/common.handle_all_urls"
      ],
      "target": {
         "namespace": "android_app",
         "package_name": "example.com.puppies.app",
         "sha256_cert_fingerprints": [
            "14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64:16:A0:83:42:E6:1D:BE:A8:8A:04:96:B2:3F:CF:44:E5"
         ]
      }
   },
   {
      "relation": [
         "delegate_permission/common.handle_all_urls"
      ],
      "target": {
         "namespace": "android_app",
         "package_name": "example.com.monkeys.app",
         "sha256_cert_fingerprints": [
            "14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64:16:A0:83:42:E6:1D:BE:A8:8A:04:96:B2:3F:CF:44:E5"
         ]
      }
   }
]

Witryna internetowa Google Digital Asset Links zawiera narzędzie online, które może pomóc w tworzeniu i testowaniu pliku zasobów cyfrowych.

Po zaimplementowaniu linków do aplikacji różne elementy powinny zostać przetestowane, aby upewnić się, że działają zgodnie z oczekiwaniami.

Istnieje możliwość potwierdzenia, że plik zasobów cyfrowych jest poprawnie sformatowany i hostowany przy użyciu interfejsu API linków do zasobów cyfrowych firmy Google, jak pokazano w tym przykładzie:

https://digitalassetlinks.googleapis.com/v1/statements:list?source.web.site=
  https://<WEB SITE ADDRESS>:&relation=delegate_permission/common.handle_all_urls

Istnieją dwa testy, które można wykonać, aby upewnić się, że filtry intencji zostały prawidłowo skonfigurowane i że aplikacja jest ustawiona jako domyślna procedura obsługi dla identyfikatora URI:

  1. Plik zasobu cyfrowego jest poprawnie hostowany zgodnie z powyższym opisem. Pierwszy test wyśle intencję, którą system Android powinien przekierować do aplikacji mobilnej. Aplikacja systemu Android powinna zostać uruchomiona i wyświetlić działanie zarejestrowane dla adresu URL. W wierszu polecenia wpisz:

    $ adb shell am start -a android.intent.action.VIEW \
        -c android.intent.category.BROWSABLE \
        -d "http://<domain1>/recipe/scalloped-potato"
    
  2. Wyświetl istniejące zasady obsługi linków dla aplikacji zainstalowanych na danym urządzeniu. Następujące polecenie spowoduje zrzut listy zasad linków dla każdego użytkownika na urządzeniu z następującymi informacjami. W wierszu polecenia wpisz następujące polecenie:

    $ adb shell dumpsys package domain-preferred-apps
    
    • Package — nazwa pakietu aplikacji.
    • Domain — domeny (oddzielone spacjami), których linki internetowe będą obsługiwane przez aplikację
    • Status — Jest to bieżący stan obsługi linków dla aplikacji. Wartość zawsze oznacza, że aplikacja zadeklarowała android:autoVerify=true i przeszła weryfikację systemu. Następuje po nim numer szesnastkowy reprezentujący rekord preferencji systemu Android.

    Na przykład:

    $ adb shell dumpsys package domain-preferred-apps
    
    App linkages for user 0:
    Package: com.android.vending
    Domains: play.google.com market.android.com
    Status: always : 200000002
    

Podsumowanie

W tym przewodniku omówiono sposób działania łączenia aplikacji w systemie Android 6.0. Następnie omówiliśmy sposób konfigurowania aplikacji dla systemu Android 6.0 w celu obsługi linków aplikacji i reagowania na nie. Omówiono również sposób testowania łączenia aplikacji w aplikacji systemu Android.