web-dev-qa-db-fra.com

Lien dynamique Firebase n'ouvrant pas l'application

J'ai développé une application Android localement sur mon appareil (application pas encore sur Android Play Store). J'ai la logique suivante pour obtenir un lien profond dans MainActivity.

GoogleApiClient mGoogleApiClient = new GoogleApiClient.Builder(this)
            .enableAutoManage(this, null)
            .addApi(AppInvite.API)
            .build();

    // Check if this app was launched from a deep link. Setting autoLaunchDeepLink to true
    // would automatically launch the deep link if one is found.
    boolean autoLaunchDeepLink = false;
    AppInvite.AppInviteApi.getInvitation(mGoogleApiClient, this, autoLaunchDeepLink)
            .setResultCallback(
                    new ResultCallback<AppInviteInvitationResult>() {
                        @Override
                        public void onResult(@NonNull AppInviteInvitationResult result) {
                            if (result.getStatus().isSuccess()) {
                                // Extract deep link from Intent
                                Intent intent = result.getInvitationIntent();
                                String deepLink = AppInviteReferral.getDeepLink(intent);

                                Toast.makeText(getApplicationContext(), deepLink, Toast.LENGTH_LONG).show();
                                // Handle the deep link. For example, open the linked
                                // content, or apply promotional credit to the user's
                                // account.

                                // ...
                            } else {
                                Log.d(TAG, "getInvitation: no deep link found.");
                            }
                        }
                    });

J'ai construit des liens dynamiques à l'aide de la console Firebase et les ouvre dans un navigateur mobile. Mais il ne s'agit pas d'ouvrir mon application et d'atteindre la ligne String deepLink = AppInviteReferral.getDeepLink (intent);

Au lieu de cela, il ouvre l'URL dans le navigateur mobile lui-même.

Comment ouvrir l'application et gérer le lien profond dans l'activité tout en utilisant le lien dynamique firebase?

Modifier:

J'ai filtre d'intention dans le fichier manifeste.

<activity Android:name="MainActivity"
        Android:label="@string/app_name">
        <intent-filter>
            <action Android:name="Android.intent.action.MAIN" />
            <category Android:name="Android.intent.category.LAUNCHER" />
            <action Android:name="Android.intent.action.VIEW"/>
            <category Android:name="Android.intent.category.DEFAULT"/>
            <category Android:name="Android.intent.category.BROWSABLE"/>
            <data Android:Host="example.com" Android:scheme="http"/>
            <data Android:Host="example.com" Android:scheme="https"/>
        </intent-filter>
    </activity>
11
user3559471

Alternativement, vous pouvez également fournir les données dans votre filtre d'intention, comme indiqué dans la doc "liens profonds" ( https://developer.Android.com/training/app-indexing/deep-linking.html )

Le filtre d'intention ressemblerait alors à ceci: 

        <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="https://XXYYZZ42.app.goo.gl/"  // <- Replace with your deep link from the console
                Android:scheme="https"/>
        </intent-filter>

Ce lien peut être obtenu dans votre console, ici:  enter image description here

EDIT: ajout de la photo pour montrer où trouver ce lien

6
NSimon

J'ai eu le même problème avec les liens profonds ne fonctionnant pas et les réponses précédentes n'aidaient pas. En quoi l’astuce consistait à diviser la balise "data" comme suit:

Au lieu de:

<data Android:Host="example.com" Android:scheme="http"/>
<data Android:Host="example.com" Android:scheme="https"/>

Faire ceci:

<data Android:Host="example.com"/>
<data Android:scheme="http"/>
<data Android:scheme="https"/>

J'espère que cela aidera quelqu'un d'autre :)

1
Shirane85

Comme expliqué dans une autre réponse, votre filtre d'intention semble avoir quelques problèmes. De plus, votre URL peut avoir quelques problèmes. Quand je jouais avec ceux-ci, j'avais créé une URL erronée vers le site Web de FireBase sans m'en rendre compte. Il est possible de tester votre code en ouvrant l'URL complète dans votre application. J'ai écrit toutes les URL à tester dans un email et à m'envoyer moi-même, ouvrir dans l'appareil et a commencé à cliquer. Après cela, vous pouvez créer l’URL que vous voulez dans FireBase. Voici quelques exemples (fautes de frappe et autres erreurs possibles):

Si vous avez cliqué sur cette URL sur votre appareil:

https://<myapp>.app.goo.gl/?link=https://mysite.fi/112972&apn=com.mydomain.myapp

et avait ceci en vous manifeste:

 <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="https"
            Android:Host="mysite.fi"
            Android:pathPattern=".*" />
    </intent-filter>

Il devrait ouvrir https://mysite.fi/112972 dans votre application (com.mydomain.myapp) et si vous ouvriez le lien sur votre PC, il ouvrirait https://mysite.fi/112972. dans le navigateur.

Si vous avez ouvert cette URL dans votre appareil:

https://<myapp>.app.goo.gl/?link=https://mysite.fi/112972&apn=com.mydomain.myapp&al=x-myscheme://mydeeplink/112972&afl=http://fallback.fi

et avait ceci en vous manifeste:

 <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="myscheme"
            Android:Host="mydeeplink"
            Android:pathPattern=".*" />
    </intent-filter>

Cela ouvrirait myscheme: // mydeeplink/112972 dans votre application (com.mydomain.myapp). Vous auriez besoin d'un code pour le manipuler. Si l'application n'est pas installée, elle ouvrirait http://fallback.fi dans votre navigateur. Sur le PC, il serait toujours ouvert https://mysite.fi/112972 .

(edit 19.3.2018) Il semble que Firebase ne supporte plus totalement 'al ='. Le code fonctionne, mais il manque dans la documentation et dans les URL générées par la console Firebase.

1
diidu

Action View (Action) et Action Main (Action principale) appartiennent toutes deux à la même catégorie. Donc, vous devez les mettre dans différents blocs comme ceci:

 <activity Android:name=".DynamicLinkActivity">
        <intent-filter>
            <action Android:name="Android.intent.action.MAIN" />

            <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:Host="example.com"
                Android:scheme="http" />
            <data
                Android:Host="example.com"
                Android:scheme="https" />
        </intent-filter>
    </activity>
1
RJ chakraborty

Mise à jour janvier 2019

Vérifiez que vous avez ajouté l'empreinte digitale du certificat SHA256 pour votre application dans votre projet dans la console Firebase. 

Ajoutez le code ci-dessous dans le fichier AndroidManifest.xml sous l'activité pour laquelle vous souhaitez que le lien dynamique se connecte à déjeuner: 

    <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:Host="mydomainname.page.link" Android:scheme="http"/>
       <data Android:Host="mydomainname.page.link" Android:scheme="https"/>
   </intent-filter>
  • Supprimez Android: autoVerify = "true" si vous avez Android 6.0 (niveau d’API 23) et inférieur, ou l’application se bloquera. 
0
Leo S