wake-up-neo.net

Dynamischer Firebase-Link öffnet die App nicht

Ich habe eine Android-App lokal auf meinem Gerät entwickelt (App noch nicht im Android Play Store). Ich habe die folgende Logik, um in MainActivity eine tiefe Verbindung zu erhalten.

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.");
                            }
                        }
                    });

Ich habe einige dynamische Links mithilfe der Firebase-Konsole erstellt und im mobilen Browser geöffnet. Es ist jedoch nicht das Öffnen meiner App und das Erreichen der Zeile String deepLink = AppInviteReferral.getDeepLink (intent);

Stattdessen wird die URL im mobilen Browser selbst geöffnet.

Wie öffne ich die App und verwende den Deep Link in der Aktivität, während du Firebase Dynamic Link verwendest?

Bearbeiten:

Ich habe Absichtsfilter in der Manifestdatei.

<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

Alternativ können Sie auch die Daten in Ihrem Intent-Filter angeben, wie im "regulären" Deep-Links-Dokument angegeben. ( https://developer.Android.com/training/app-indexing/deep-linking.html )

Der Absichtsfilter würde dann wie folgt aussehen: 

        <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>

Den besagten Link erhalten Sie in Ihrer Konsole hier:  enter image description here

BEARBEITEN: Das Bild wurde hinzugefügt, um zu zeigen, wo dieser Link zu finden ist

6
NSimon

Ich hatte das gleiche Problem, da Deep Links nicht funktionierten und die vorherigen Antworten nicht geholfen haben. Der Trick bestand darin, das "data" -Tag wie folgt aufzuteilen:

Anstatt:

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

Mach das:

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

Hoffe, das hilft allen anderen :)

1
Shirane85

Wie in einer anderen Antwort erläutert, scheint Ihr Intent-Filter einige Probleme zu haben. Auch Ihre URL kann einige Probleme haben. Als ich damit spielte, hatte ich eine fehlerhafte URL zur FireBase-Website erstellt, ohne es zu bemerken. Sie können Ihren Code testen, indem Sie die gesamte URL in Ihrer App öffnen. Ich habe alle URLs zum Testen in eine E-Mail geschrieben und an mich gesendet, im Gerät geöffnet und mit dem Klicken begonnen. Danach können Sie die gewünschte URL in FireBase erstellen. Nachfolgend einige Beispiele (Tippfehler und andere Fehler möglich):

Wenn Sie diese URL auf Ihrem Gerät angeklickt haben:

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

und hatte dies in deinem Manifest:

 <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>

Es sollte https://mysite.fi/112972 in Ihrer App (com.mydomain.myapp) geöffnet werden. Wenn Sie den Link auf Ihrem PC öffnen, öffnet sich https://mysite.fi/112972 im Browser.

Wenn Sie diese URL in Ihrem Gerät geöffnet haben:

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

und hatte dies in deinem Manifest:

 <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>

Es öffnet sich myscheme: // mydeeplink/112972 in Ihrer App (com.mydomain.myapp). Sie benötigen Code, um damit umzugehen. Wenn die App nicht installiert ist, wird http://fallback.fi in Ihrem Browser geöffnet. Auf dem PC würde es noch geöffnet https://mysite.fi/112972 .

(edit 19.3.2018) Es scheint, dass Firebase 'al =' nicht mehr vollständig unterstützt. Der Code funktioniert, aber er fehlt in der Dokumentation und die von Firebase Console generierten URLs.

1
diidu

Action View und Action Main haben beide unterschiedliche Intent-Kategorien. Sie müssen sie also in verschiedene Blöcke wie folgt einfügen:

 <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

Update Januar 2019

Stellen Sie sicher, dass Sie den Fingerabdruck für das SHA256-Zertifikat für Ihre App in Ihrem Projekt in der Firebase-Konsole hinzugefügt haben. 

Fügen Sie den folgenden Code in der AndroidManifest.xml unter der Aktivität hinzu, die der dynamische Link zum Mittagessen enthalten soll: 

    <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>
  • Entfernen Sie Android: autoVerify = "true" wenn Sie Android 6.0 (API-Ebene 23) oder darunter haben, sonst stürzt die App ab. 
0
Leo S