AppLinks
About
Π₯ΡΠ°Π½ΠΈΡΡ ΡΠ΅ΠΊΡΠ΅ΡΡ Π½Π° ΠΊΠ»ΠΈΠ΅Π½ΡΠ΅ - ΠΏΠ»ΠΎΡ ΠΎ. Π₯ΠΎΡΠΎΡΠ΅ΠΉ ΠΏΡΠ°ΠΊΡΠΈΠΊΠΎΠΉ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ° ΠΈΡ Ρ Π±ΡΠΊΠ΅Π½Π΄-ΡΠ΅ΡΠ²Π΅ΡΠ°. ΠΠΎΠ»Π΅Π΅Π΅ ΡΠΎΠ³ΠΎ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΡΡΠ»ΠΎΠΊ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅Ρ, ΡΡΠΎ ΡΠΎΠ»ΡΠΊΠΎ Π²Π°ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΠΌΠΎΠΆΠ΅Ρ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ Π»ΡΠ±ΠΎΠΉ Redirect URI (Π² OAuth) ΠΈΠ»ΠΈ Π»ΡΠ±ΠΎΠΉ URL, Π² ΡΠ΅Π»ΠΎΠΌ. ΠΡΠΎ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ΠΌ Universal Link with Site Association
Papers
ΠΎΠ±Ρ ΠΎΠ΄ ΡΡΠΎΠ³ΠΎ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠ°? https://medium.com/swlh/android-hacked-any-link-could-be-linked-to-your-app-by-default-4b49e3692949
Android
AppLinks - ΡΡΠΎ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΡΠΉ ΡΠΏΠΎΡΠΎΠ± (Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½Π°Ρ Π²Π΅ΡΡΠΈΡ DeepLinks) ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΠΊΡΠΈΡΠΈΡΠ½ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΡΠ΅ΠΊΡΠ΅Ρ Π΄Π»Ρ Π°ΡΡΠ΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ) ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΡΠ΅ΡΠ΅Π· ΡΡΠΎΡΠΎΠ½Π½ΠΈΠΉ ΡΠ΅ΡΠ²ΠΈΡ.
ΠΠΎΠ΄ΡΠΎΠ±Π½ΠΎ: https://habr.com/ru/company/jugru/blog/352914/
ΠΠ»Ρ Android, ΡΡΠΎΠ±Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ DeepLinks ΠΊΠ°ΠΊ AppLinks, Π½Π°Π΄ΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π²ΠΎ Π²ΡΠ΅ Web URL intent filters Π°ΡΡΠΈΠ±ΡΡ android:autoVerify="true". 
ΠΡΠΈΠΌΠ΅Ρ:
<activity ...>
    <intent-filter android:autoVerify="true">
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
        <data android:scheme="http" android:host="www.example.com" />
        <data android:scheme="https" />
    </intent-filter>
</activity>ΠΠΎΠ»Π΅Π΅ ΡΠΎΠ³ΠΎ, Ρ Π²Π°Ρ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌΠΎΠΉ ΡΡ
Π΅ΠΌΡ Π² Π²Π°ΡΠ΅ΠΌ intent filter, Π° ΡΠΎΠ»ΡΠΊΠΎ http ΠΈΠ»ΠΈ https! Π ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π΅, Π½ΠΎ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ Π²Π°ΠΆΠ½ΠΎΠ΅: Π²Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ Π²ΠΊΠ»ΡΡΠΈΡΡ ΡΠ°ΠΉΠ» json Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ assetlinks.json. ΠΠ° ΡΡΠΎΡΠΎΠ½Π΅ web-ΡΠ΅ΡΠ²Π΅ΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ Π² intent filter. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ: https://example.com/.well-known/assetlinks.json
ΠΡΠΈΠΌΠ΅Ρ ΡΠ°ΠΊΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π°:
[{
    "relation": ["delegate_permission/common.handle_all_urls"],
    "target": {
   	 "namespace": "android_app",
   	 "package_name": "com.example.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": "com.example.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"]
  }]package_name Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡΡ Ρ app_id Π²Π°ΡΠ΅Π³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, Π° sha256_ccert_fingerprints Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡΡ Ρ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠΎΠ² ΠΏΠΎΠ΄ΠΏΠΈΡΠΈ Π²Π°ΡΠ΅Π³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ.
ΠΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΊΠ»ΠΈΠΊΠ½Π΅Ρ ΠΏΠΎ AppLink, Android ΡΡ ΠΎΠ΄ΠΈΡ Π½Π° Π²Π°Ρ ΡΠ΅ΡΠ²Π΅Ρ, Π·Π°Π±Π΅ΡΠ΅Ρ assetlinks.json ΡΠ°ΠΉΠ» ΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΈΡ, ΡΡΠΎ app_id ΠΈ ΠΏΠΎΠ΄ΠΏΠΈΡΡ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡΡ Ρ Π²Π°ΡΠΈΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ.
ΠΠΎΠ΄ΡΠΎΠ±Π½ΠΎ ΠΏΡΠΎ ΠΏΡΠΎΠ²Π΅ΡΠΊΡ AppLinks Π² Android: https://developer.android.com/training/app-links/verify-site-associations#request-verify
iOS
ΠΡΠΈΠΌΠ΅Ρ ΡΡΡΠ»ΠΊΠΈ Π΄Π»Ρ iOS: https://some.app.link/.well-known/apple-app-site-association
ΠΠ°ΠΊ ΡΡΠΎ Π²ΡΡΡΠΎΠΈΡΡ Π½Π° iOS: https://developer.apple.com/library/archive/documentation/General/Conceptual/AppSearch/UniversalLinks.html
Last updated
Was this helpful?