J'ai ceci intent-filter
que je souhaite que chaque fois qu'un utilisateur clique sur un lien vers eeexample.com pour ouvrir mon application:
<intent-filter>
<data Android:scheme="http" />
<data Android:scheme="http" Android:Host="eeexample.com"/>
<action Android:name="Android.intent.action.VIEW" />
<category Android:name="Android.intent.category.DEFAULT" />
<category Android:name="Android.intent.category.BROWSABLE" />
</intent-filter>
Lorsque l'utilisateur clique sur eeexample.com sur l'application gmail, par exemple:
Ce qui ouvre alors une boîte de dialogue qui demande à l'utilisateur s'il souhaite que ce lien soit ouvert depuis mon application ou le navigateur comme ceci:
Mais je veux juste que lorsque l'utilisateur clique sur le lien, il ouvre [~ # ~] seulement [~ # ~] mon application sans rien demander. Ou dans le pire des cas, il suffit de demander à l'ouvrir avec mon application qui n'est pas Appetit avec navigateur. Est-ce possible?
Il semble donc que cela soit possible avec App Links mais uniquement pour le niveau d'API 23 (Android 6.0), mais j'en ai besoin pour le niveau d'api 15 (Android 4.0), des idées?
Le contournement de la boîte de dialogue de désambiguïsation n'est possible qu'avec le Android 6.0 API pour App Linking .
Par la formation Gestion des liens d'application :
Android 6.0 (API niveau 23) et supérieur permet à une application de se désigner comme gestionnaire par défaut d'un type de lien donné. Si l'utilisateur ne souhaite pas que l'application soit le gestionnaire par défaut, il peut remplacer ce comportement dans Paramètres .
La gestion automatique des liens nécessite la coopération des développeurs d'applications et des propriétaires de sites Web. Un développeur doit configurer son application pour déclarer des associations avec un ou plusieurs sites Web et demander au système de vérifier ces associations. Un propriétaire de site Web doit, à son tour, fournir cette vérification en publiant un fichier Digital Asset Links.
Cela implique de créer le gestionnaire d'intention approprié et d'activer la vérification automatique en ajoutant 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.Android.com" />
<data Android:scheme="https" Android:Host="www.Android.com" />
</intent-filter>
</activity>
Ensuite, les mises à jour doivent être effectuées du côté du site Web en déclarant une association de site Web , ce qui garantit que le propriétaire du site Web et le développeur de l'application se coordonnent pour permettre à l'application de devenir automatiquement la valeur par défaut pour un schéma d'URL .
Voici quelques emplacements que vous pouvez utiliser pour vérifier que .well-known/assetlinks.json
est accessible, ce qui est une condition préalable importante pour supprimer la boîte de dialogue de désambiguïsation.
https://developers.google.com/digital-asset-links/tools/generator
Quant à mon cas, malgré tout ce qui est vérifié, la boîte de dialogue de désambiguïsation ne voulait tout simplement pas disparaître. Il s'est avéré que j'utilisais également FirebaseUI Auth pour GitHub ( https://github.com/firebase/FirebaseUI-Android/tree/master/auth ), qui utilise firebase_web_Host
; s'il est défini autre chose que la valeur définie dans Android:Host
, puis Android:autoVerify
échoue également.
Le problème était, firebase_web_Host
a été enterré quelque part en dehors de mon code, donc ce n'était pas exactement évident pourquoi Android:autoVerify
échouait. Un moyen simple de le savoir est de vérifier adb log
lors de l'installation de l'application; vous devriez voir quelque chose comme
IntentFilterIntentSvc: Verification .. complete. Success:true. Failed hosts:.
Si tu vois Success:false
, il devrait montrer quels hôtes ont échoué, ce qui devrait vous donner un indice sur où chercher.
tout ce que vous avez fait est correct, il suffit de modifier https et http avec un autre exemple de données Word wirte 'app' Android: scheme = "app" Android: Host = "com" Android: pathPrefix = "/ easy"
http ou https signifie exécuter le navigateur puis provoquer un conflit
dans votre put AndroidManife.xml
<intent-filter>
<action Android:name="Android.intent.action.VIEW" />
<category Android:name="Android.intent.category.DEFAULT" />
<category Android:name="Android.intent.category.BROWSABLE" />
<data Android:scheme="myAPP" />
</intent-filter>
par exemple
<activity
Android:name="Activity"
Android:exported="true"
Android:windowSoftInputMode="adjustPan">
<intent-filter>
<action Android:name="Android.intent.action.MAIN" />
<category Android:name="Android.intent.category.DEFAULT" />
<category Android:name="Android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action Android:name="Android.intent.action.VIEW" />
<category Android:name="Android.intent.category.DEFAULT" />
<category Android:name="Android.intent.category.BROWSABLE" />
<data Android:scheme="myAPP" />
</intent-filter>
</activity>
après cela, lorsque vous cliquez sur une URL avec le schéma "myAPP", votre application s'ouvrira Aucune demande de l'utilisateur
par exemple URL