6 votes

Android firebase dynamic link PendingDynamicLinkData est null directement dans l'application

Problème : Pourquoi les "liens dynamiques courts" créés par programme n'ouvrent-ils pas/lancent-ils directement l'application ?

Je veux lancer l'application directement lorsque l'utilisateur clique sur l'url dynamique créée dynamiquement par l'application Android.

Lorsque vous cliquez sur un lien court créé dynamiquement par l'application Android, les choses suivantes se produisent,

1. option montrer deux options l'une est par chrome l'autre est par l'application

2. Si je choisis l'option chrome, le navigateur s'ouvre, affiche une boîte de dialogue de chargement et lance l'application avec les données PendingDynamicLinkData.

3.mais si je choisis l'option app, l'app lance l'app mais PendingDynamicLinkData est perdu ou nul.

Toute aide serait la bienvenue. Mon manifeste est réglé comme suit

  <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="myapp.page.link" android:scheme="http"/>
    <data android:host="myapp.page.link" android:scheme="https"/>
  </intent-filter>

2voto

Onix Points 614

Vous devez gérer votre PendingDynamicLinkData dans l'activité pour remplacer onCreate et onNewIntent. Comme ceci :

@Override
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Intent intent = getIntent();
        if (intent != null) {
            handleDeepLink(intent);
        }
}

@Override
protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);
    if (intent != null) {
        handleDeepLink(intent);
    }
}

private void handleDeepLink(Intent intent) {
        FirebaseDynamicLinks.getInstance().getDynamicLink(intent).addOnSuccessListener(pendingDynamicLinkData -> {
            if (pendingDynamicLinkData != null) {
                Uri deepLink = pendingDynamicLinkData.getLink();
                if (deepLink != null) {
                    // todo .....
                }
            }
        });
    }

0voto

Umer Softwares Points 136

Je ne connais pas la bonne solution mais j'ai trouvé une astuce qui fonctionne. Tout d'abord, assurez-vous que vous avez ajouté le filtre d'intention suivant à l'activité qui est censée gérer le lien dynamique :

    <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="example.com"
            android:scheme="http" />
        <data
            android:host="example.com"
            android:scheme="https" />
    </intent-filter>

Source :

Ensuite, dans votre activité, utilisez le code suivant pour obtenir le lien :

String link=null;
if (getIntent().getData()!=null){
    link=getIntent().getData().toString();
}

0voto

ByteArtisan Points 2238

Dans le manifeste, ajoutez le filtre d'intention suivant à l'activité qui traitera l'url :

Remplacer la méthode OnStart de l'activité cible :

public override fun onStart() {
    super.onStart()
    FirebaseDynamicLinks.getInstance()
    .getDynamicLink(getIntent())
    .addOnSuccessListener(this, new OnSuccessListener<PendingDynamicLinkData>() {
        @Override
        public void onSuccess(PendingDynamicLinkData pendingDynamicLinkData) {
            // Get deep link from result (may be null if no link is found)
            Uri deepLink = null;
            if (pendingDynamicLinkData != null) {
                deepLink = pendingDynamicLinkData.getLink();
            }
            // ...
        }
    })
    .addOnFailureListener(this, new OnFailureListener() {
        @Override
        public void onFailure(@NonNull Exception e) {
            Log.w(TAG, "getDynamicLink:onFailure", e);
        }
    });

Le guide complet aquí . Pour une raison quelconque, je n'ai pas réussi à le faire fonctionner dans la même activité que l'action MAIN.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X