web-dev-qa-db-fra.com

Comment ouvrir une application à partir d'un lien sans demander à l'utilisateur de choisir entre un navigateur ou une application, ouvrez simplement mon application immédiatement

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: enter image description here

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:

enter image description here

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?

Mettre à jour

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?

20
Jeka

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 .

8
ianhanniballake

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

https://digitalassetlinks.googleapis.com/v1/statements:list?source.web.site=https://YOUR_WEBSITE&relation=delegate_permission/common.handle_all_urls

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.

2
solamour

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

1
noyan

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

myAPP: //votresite.com

myAPP: //any.site.com

0
Iman mirzaei