Jeśli Twoja aplikacja korzystająca z funkcji Smart Lock na hasła współużytkuje z Twoją witryną bazę danych użytkowników – lub jeśli Twoja aplikacja i witryna korzystają z usług sfederowanych dostawców logowania, takich jak Logowanie przez Google – możesz powiązać aplikację ze stroną, aby użytkownik zapisywał swoje dane logowania, a następnie automatycznie logował się zarówno w aplikacji, jak i w witrynie.
Aby powiązać aplikację z witryną, zadeklaruj powiązania, hostując w swojej witrynie plik JSON Digital Asset Links i dodając link do pliku Digital Asset Link do pliku manifestu aplikacji.
Zamieszczając w swojej witrynie deklarację dotyczącą komponentów cyfrowych, umożliwiasz jej też udostępnianie w niej danych autouzupełniania aplikacji na Androidzie 8.0 lub nowszym.
Wymagania wstępne
Domena logowania Twojej witryny musi być dostępna przez HTTPS.
Powiąż aplikację z witryną
Utwórz plik JSON Digital Asset Links.
Aby na przykład zadeklarować, że witryna
https://signin.example.com
i aplikacja na Androida o nazwie pakietucom.example
mogą udostępniać dane logowania, utwórz plik o nazwieassetlinks.json
z tą treścią:[{ "relation": ["delegate_permission/common.get_login_creds"], "target": { "namespace": "web", "site": "https://signin.example.com" } }, { "relation": ["delegate_permission/common.get_login_creds"], "target": { "namespace": "android_app", "package_name": "com.example", "sha256_cert_fingerprints": [ "F2:52:4D:82:E7:1E:68:AF:8C:BC:EA:B0:A2:83:C8:FE:82:51:CF:63:09:6A:4C:64:AE:F4:43:27:20:40:D2:4B" ] } }]
Pole
relation
jest tablicą z co najmniej jednym ciągiem znaków opisującym deklarowaną relację. Aby zadeklarować, że aplikacje i witryny mają wspólne dane logowania, podaj ciągdelegate_permission/common.get_login_creds
.Pole
target
to obiekt określający zasób, którego dotyczy deklaracja. Te pola identyfikują witrynę:namespace
web
site
Adres URL witryny w formacie
https://domain[:optional_port]
, np.https://www.example.com
.domain musi być w pełni kwalifikowana, a optional_port musi być pominięty, jeśli używasz portu 443 dla HTTPS.
Cel
site
może być tylko domeną główną: nie możesz ograniczyć powiązania aplikacji do określonego podkatalogu. Nie umieszczaj w adresie URL ścieżki (np. ukośnika).Subdomeny nie są uznawane za pasujące: oznacza to, że jeśli domain ma wartość
www.example.com
, domenawww.counter.example.com
nie jest powiązana z Twoją aplikacją.Te pola identyfikują aplikację na Androida:
namespace
android_app
package_name
Nazwa pakietu zadeklarowana w pliku manifestu aplikacji. Przykład: com.example.android
sha256_cert_fingerprints
Odciski cyfrowe SHA256 certyfikatu podpisywania aplikacji. Do wygenerowania odcisku cyfrowego możesz użyć tego polecenia: $ keytool -list -v -keystore my-release-key.keystore
Więcej informacji znajdziesz w dokumentacji linków do zasobów cyfrowych.
Udostępnij plik JSON protokołu Digital Assets Link w tej lokalizacji w domenie logowania:
https://domain[:optional_port]/.well-known/assetlinks.json
Jeśli na przykład Twoja domena logowania to
signin.example.com
, hostuj plik JSON pod adresemhttps://signin.example.com/.well-known/assetlinks.json
.Typ MIME pliku Digital Assets Link musi być w formacie JSON. Upewnij się, że serwer wysyła w odpowiedzi nagłówek
Content-Type: application/json
.Upewnij się, że usługodawca hostingowy zezwala Google na pobranie pliku Digital Asset Link. Jeśli masz plik
robots.txt
, musi on pozwalać agentowi Googlebota na pobranie/.well-known/assetlinks.json
. Większość witryn może po prostu zezwolić dowolnemu agentowi automatycznemu na pobieranie plików ze ścieżki/.well-known/
, aby inne usługi miały dostęp do metadanych w tych plikach:User-agent: * Allow: /.well-known/
Zadeklaruj powiązanie w aplikacji na Androida.
Dodaj ten wiersz do pliku manifestu w obszarze
<application>
:<meta-data android:name="asset_statements" android:resource="@string/asset_statements" />
Dodaj do pliku
strings.xml
zasób tekstowyasset_statements
. Ciągasset_statements
to obiekt JSON określający plikiassetlinks.json
do wczytania. Musisz zmienić znaczenie wszystkich apostrofów i cudzysłowów użytych w ciągu znaków. Na przykład:<string name="asset_statements" translatable="false"> [{ \"include\": \"https://signin.example.com/.well-known/assetlinks.json\" }] </string>
> GET /.well-known/assetlinks.json HTTP/1.1 > User-Agent: curl/7.35.0 > Host: signin.example.com < HTTP/1.1 200 OK < Content-Type: application/json
Opublikuj aplikację w Sklepie Google Play. Aby można było odbierać powiązania, musi on być udostępniony na kanale publicznym.
(Opcjonalnie) Wypełnij i prześlij formularz powiązania usługi Smart Lock na hasła, by potwierdzić, że ten proces został ukończony. Co jakiś czas Google sprawdza, czy informacje o powiązaniach przesyłane za pomocą formularza faktycznie działają. Możemy się z Tobą skontaktować w razie problemów.
Gdy weryfikacja zostanie zakończona, użytkownicy aplikacji będą mogli zapisać swoje dane logowania zarówno w aplikacji, jak i w witrynie, i będą się automatycznie logować w obu tych usługach.
Przykład: powiązanie wielu aplikacji z witryną
Z witryną możesz powiązać wiele aplikacji, wskazując każdą z nich w pliku Digital Assets Link. Aby na przykład powiązać aplikacje com.example
i com.example.pro
z witryną pod adresem https://signin.example.com/
, określ je w pliku JSON hostowanym tutaj https://signin.example.com/.well-known/assetlinks.json
:
[{
"relation": ["delegate_permission/common.get_login_creds"],
"target": {
"namespace": "web",
"site": "https://signin.example.com"
}
},{
"relation": ["delegate_permission/common.get_login_creds"],
"target": {
"namespace": "android_app",
"package_name": "com.example",
"sha256_cert_fingerprints": [
"F2:52:4D:82:E7:1E:68:AF:8C:BC:EA:B0:A2:83:C8:FE:82:51:CF:63:09:6A:4C:64:AE:F4:43:27:20:40:D2:4B"
]
}
},{
"relation": ["delegate_permission/common.get_login_creds"],
"target": {
"namespace": "android_app",
"package_name": "com.example.pro",
"sha256_cert_fingerprints": [
"F2:52:4D:82:E7:1E:68:AF:8C:BC:EA:B0:A2:83:C8:FE:82:51:CF:63:09:6A:4C:64:AE:F4:43:27:20:40:D2:4B"
]
}
}]
Następnie zadeklaruj powiązanie w obu aplikacjach:
Dodaj ten wiersz do pliku manifestu w obszarze
<application>
:<meta-data android:name="asset_statements" android:resource="@string/asset_statements" />
Dodaj do pliku
strings.xml
ten ciąg znaków:<string name="asset_statements" translatable="false"> [{ \"include\": \"https://signin.example.com/.well-known/assetlinks.json\" }] </string>
Przykład: powiązanie aplikacji z wieloma witrynami
Możesz powiązać aplikacje z wieloma witrynami, określając każdą witrynę w pliku Digital Assets Link i umieszczając plik w każdej witrynie. Aby na przykład powiązać aplikacje com.example
i com.example.pro
z witryną w witrynach https://signin.example.com/
i https://m.example.com/
, wskaż te aplikacje i obie witryny w pliku JSON hostowanym pod adresem https://signin.example.com/.well-known/assetlinks.json
:
[{
"relation": ["delegate_permission/common.get_login_creds"],
"target": {
"namespace": "web",
"site": "https://signin.example.com"
}
},{
"relation": ["delegate_permission/common.get_login_creds"],
"target": {
"namespace": "web",
"site": "https://m.example.com"
},
},{
"relation": ["delegate_permission/common.get_login_creds"],
"target": {
"namespace": "android_app",
"package_name": "com.example",
"sha256_cert_fingerprints": [
"F2:52:4D:82:E7:1E:68:AF:8C:BC:EA:B0:A2:83:C8:FE:82:51:CF:63:09:6A:4C:64:AE:F4:43:27:20:40:D2:4B"
]
}
},{
"relation": ["delegate_permission/common.get_login_creds"],
"target": {
"namespace": "android_app",
"package_name": "com.example.pro",
"sha256_cert_fingerprints": [
"F2:52:4D:82:E7:1E:68:AF:8C:BC:EA:B0:A2:83:C8:FE:82:51:CF:63:09:6A:4C:64:AE:F4:43:27:20:40:D2:4B"
]
}
}]
Następnie w pliku JSON hostowanym na https://m.example.com/.well-known/assetlinks.json
dodaj główny plik Digital Asset Links:
[{
"include": "https://signin.example.com/.well-known/assetlinks.json"
}]
Na koniec zadeklaruj powiązanie w obu aplikacjach:
Dodaj ten wiersz do pliku manifestu w obszarze
<application>
:<meta-data android:name="asset_statements" android:resource="@string/asset_statements" />
Dodaj do pliku
strings.xml
ten ciąg znaków:<string name="asset_statements" translatable="false"> [{ \"include\": \"https://signin.example.com/.well-known/assetlinks.json\" }] </string>