web-dev-qa-db-fra.com

Comment ouvrir une application installée à partir d'une URL de messagerie dans Android?

Je souhaite ouvrir mon application depuis une adresse électronique, comme dans l'exemple ci-dessous pour Twitter.com .

Email avec lien:

Email with link

Sélection pour ouvrir l'application ou le navigateur:

Select app or browser

Après avoir cliqué sur le choix de l'application, l'application Twitter s'ouvre:

Open Twitter app

J'ai essayé le code suivant, mais cela ne fonctionne pas:

<intent-filter>
    <action Android:name="Android.intent.action.VIEW"></action>
    <category Android:name="Android.intent.category.DEFAULT"></category>
    <category Android:name="Android.intent.category.BROWSABLE"></category>
    <data Android:Host="www.Twitter.com" Android:scheme="http"></data>
</intent-filter>

Si quelqu'un a une bonne réponse, veuillez écrire quelques exemples ici.

18
Roadies

Le code suivant a fonctionné pour moi:

<intent-filter>
    <action Android:name="Android.intent.action.VIEW"></action>

    <category Android:name="Android.intent.category.DEFAULT"></category>
    <category Android:name="Android.intent.category.BROWSABLE"></category>

    <data
        Android:Host="www.my.app.com"
        Android:path="launch"
        Android:scheme="http"></data>
</intent-filter>

Avec le lien de messagerie défini comme http://www.my.app.com/launch.

Ref: Lancer l'application Android à partir d'un lien ou d'un email

11
hemu

Il suffit de passer par ceci Deeplinking google document. Vous viendrez pour en savoir plus sur ce concept de lien profond.

J'espère que cela aidera un corps.

9
Aristo Michael

Ex: Votre URL sera quelque chose comme https://roadies.com et vous avez le filtre d'intention dans manifeste comme ci-dessous 

        Android:name="com.droid.MainActivity"
        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:Host="roadies.com"
            Android:scheme="https" />
    </intent-filter>

    </activity>
3
Vny Kumar

Pour moi, aucune des réponses affichées ici n'a fonctionné. J'ai essayé des dizaines de syntaxes différentes sans aucun succès. J'obtenais une erreur d'analyse lors de la création de l'application via Cordova.

J'ai finalement rencontré cette réponse qui m'a conduit sur la bonne voie. 

J'ai donc créé un crochet dans le dossier PROJECT_ROOT/hooks/after_prepare/ appelé 010_add_intent_filters.sh. Voici le contenu de ce crochet: 

!/usr/bin/bash

MANIFEST=./platforms/Android/AndroidManifest.xml

grep -q pathPattern $MANIFEST && { print "Manifest already modified. Nothing to do."; exit 0; }

AFTER_LINE='Android:name="MainActivity"'
ADDITION='\
  <intent-filter>\
    <action Android:name="Android.intent.action.VIEW"></action>\
    <category Android:name="Android.intent.category.DEFAULT"></category>\
    <category Android:name="Android.intent.category.BROWSABLE"></category>\
    <data Android:scheme="https" Android:Host="google.com" Android:pathPattern=".*"></data>\
  </intent-filter>
';

sed -i -e "/${AFTER_LINE}/a${ADDITION}" $MANIFEST

Cela a finalement fonctionné. Aucune modification à config.xml n'est requise si vous prenez le chemin du hook. J'espère que cela aide quelqu'un dans le besoin.

PS: Je suis convaincu que Cordova est une excellente technologie, mais j’ai rarement vu une bibliothèque aussi mal documentée ... Il est vraiment incroyable de travailler avec cette bibliothèque. 

2
Alexandre Bourlier