J'ai suivi les instructions sur https://developer.Android.com/training/app-indexing/deep-linking.html , mais je veux déclencher l'intention par adb
avec :
adb Shell am start
-W -a Android.intent.action.BROWSEABLE
-d "http://example.com/gizmos" com.myapp.Android
Je viens d'avoir
Error: Activity not started, unable to resolve Intent { act=Android.intent.action.VIEW dat=example://gizmos flg=0x10000000 pkg=com.myapp.Android }
<activity
Android:name=".activities.DeepLinkActivity"
Android:label="@string/title_activity_deep_link">
<meta-data
Android:name="Android.app.searchable"
Android:resource="@xml/searchable" />
<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="http"
Android:Host="example.com"
Android:pathPrefix="/gizmos" />
</intent-filter>
</activity>
Ai-je commis des erreurs évidentes?
EDIT:
D'abord, assurez-vous que votre paquet est accessible par adb:
adb Shell am start -n com.example.simon.test/.activities.MainActivity
Ensuite, pour accepter plusieurs balises de données, vous avez besoin de différents filtres d'intention ( c'est ainsi que cela a fonctionné pour moi, contrairement à tous les autres exemples que j'ai vus sur le net). Par exemple.:
<intent-filter>
...
<data Android:scheme="http"
Android:Host="example.com"/>
</intent-filter>
<intent-filter>
...
<data Android:scheme="http"
Android:Host="example.com"
Android:pathPrefix="/gizmos"/>
</intent-filter>
[~ # ~] notez [~ # ~] que, dans l'exemple ci-dessus, pathPrefix commence par un barre oblique !
Je ne sais pas pourquoi les documents de Google sont si trompeurs ou peut-être que c'était pour une version différente de adb, mais les modifications ci-dessus ont parfaitement fonctionné pour moi. Cela a aidé: Source
Voici comment j'ai créé le Chrome) des liens spécifiques à un navigateur pour mon application:
<activity
Android:name=".activities.DeepLinkActivity"
Android:label="@string/app_name">
<!-- Accept chrome links -->
<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="http"
Android:Host="example.com"
Android:pathPrefix="/"/>
</intent-filter>
<!-- Accept adb data flag -->
<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="http"
Android:Host="example.com"/>
</intent-filter>
</activity>
[~ # ~] note [~ # ~] Le premier filtre fonctionne sur Google Chrome tandis que le second fonctionne sur la BAD.
NOTE2 Le menu de choix de l'application ne s'affiche pas si le lien est entré dans la barre d'adresse du navigateur. Il doit être un <a href="http://example.com"></a>
lien dans une page.
À mon avis, tout est flou et ce n’est vraiment pas ce que j’espérais. Mais c'est comme ça que ça marche sur mon appareil. J'espère que cela vous aide (et fonctionne) pour vous aussi.
Après quelques tests, voici ce qui a fonctionné pour moi:
<activity Android:name=".activities.MainActivity">
<intent-filter Android:label="@string/app_name">
<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"
Android:pathPrefix=""
/>
<data Android:scheme="myschema"
Android:Host="example"
Android:pathPrefix=""
/>
</intent-filter>
</activity>
Cela fonctionne lorsque vous cliquez sur un lien dans le navigateur tel que " http://www.example.com ", " http://www.example.com/ " ou " http://www.example.com/w Whatever ". La même chose avec "myschema: // exemple/quel que soit".
Fonctionne également avec adb
à l'aide de cette commande (avec l'une de ces URL):
adb Shell am start -W -a Android.intent.action.VIEW -d "http://www.example.com" com.example
J'espère que cela vous aidera à démarrer.
Lorsque tout fonctionne, vous souhaiterez probablement configurer un autre pathPrefix
pour différentes activités.
Dans mon cas, je mettais un filtre d'intention de liaison profonde dans MainActivity, qui est également le lanceur principal. Cela a causé le problème.
Après avoir créé une autre activité distincte et mis le filtre d'intention à cet endroit, le problème a été résolu. J'espère que cela pourra aider d'autres personnes confrontées au même problème.
Assurez-vous que votre URL est dans ce format (avec les lettres majuscules remplacées par les vôtres):
Android-app://COM.YOUR.APP.IDENTIFIER/SCHEME/HOST?somegetparams
L'outil adb ne nécessite pas ce format. Avec ce qui précède, vous pouvez maintenant le mettre dans un src, ou un href, comme ceci:
<iframe src="Android-app://COM.YOUR.APP.IDENTIFIER/SCHEME/HOST?somegetparams"> </iframe>
<a href="Android-app://COM.YOUR.APP.IDENTIFIER/SCHEME/HOST?somegetparams">LINK</a>
Tout d’abord, lisez la réponse de @ user3249477 sur cette page.
Je voulais juste ajouter qu'au lieu de ce qu'il a écrit, vous pouvez le condenser en utilisant pathPattern:
<activity
Android:name=".activities.DeepLinkActivity"
Android:label="@string/app_name">
<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="http"
Android:Host="example.com"
Android:pathPattern=".*"/>
</intent-filter>
</activity>
Le ". *" Correspond à la fois à la chaîne vide et à "/", les deux cas sont donc couverts. Si vous essayez de gérer plusieurs schémas et hôtes, cela devient particulièrement important. Vous n'avez donc pas besoin de spammer un ensemble {http, https} X {"", "/"} X {"foo", "bar" , etc.}
./adb Shell am start -n packagename/.splash.SplashActivity -d "nom_configuration: // contenu"
Utilisez adb Shell am start -W -a Android.intent.action.VIEW -d " http://example.com/gizmos " com.myapp.Android
ça va marcher.
Dans mon cas, j'ai un port 8075 dans l'URL, je l'ai supprimé et cela a fonctionné
si vous n'avez pas de problème d'autorisation, il est probablement lié au niveau de l'API
Merci Simas pour votre réponse, je voudrais ajouter quelques précisions:
après avoir testé votre activité avec cette commande:
adb Shell am start -n com.example.simon.test/.activities.MainActivity
Vous devrez tester vos liens profonds après avoir ajouté le filtre d'intention à votre fichier AndroidManifest.xml (les lignes sont ci-dessous):
... ...
c'est donc la commande adb avec laquelle vous pouvez tester:
adb Shell am start -W -a Android.intent.action.VIEW -d "http://example.com/gizmos" com.example.packageid
et
adb Shell am start -W -a Android.intent.action.VIEW -d "http://example.com" com.example.pakageid