10

ユーザーがアプリの一部のコンテンツを共有するための動的リンクを作成しました。

hrefAndroid デバイスでタグを使用して HTML ページのリンクをクリックすると、リンクが機能します。

つまり、アプリがインストールされていない場合は Play ストアに移動し、それ以外の場合はアプリを開くと、ディープ リンク アドレスを受け取ることができます。

しかし、Facebookメッセンジャーや電子メールなどの他の場所でリンクがまったく同じである場合、リンクをクリックすると機能しません。

アプリが既にインストールされている場合でも、常に Play ストアにリダイレクトされます。

どうしたの?

私のコードはここにあります。

  • ディープリンクを受信するための.java

    GoogleApiClient mGoogleApiClient = new GoogleApiClient.Builder(this)
            .enableAutoManage(this, this)
            .addApi(AppInvite.API)
            .build();
    
    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);
    
                                Log.e("sf", "### deep link : " + deepLink );
                            } else {
                                Log.d("asdf", "getInvitation: no deep link found.");
                            }
                        }
                    });
    
  • AndroidManifest.xml のアクティビティのインテント部分

        <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="mycode.app.goo.gl/"
                android:scheme="https"
                android:pathPattern=".*" />
        </intent-filter>  
    
  • 動的リンク

    https://mycode.app.goo.gl/?link=web page address &al= my custom scheme for sharing&apn=my android app's package name

4

3 に答える 3

8

このドキュメントhttps://firebase.google.com/docs/dynamic-links/に従って Firebase Dynamic Links を実装しており、Facebook および Facebook Messenger アプリを除くすべてのケースで適切に機能しています。

まず、アプリへの動的リンクを生成します。

Builder builder = new Builder()
  .scheme("https")
  .authority("winged-guild-133523.appspot.com")
  .appendPath("share")
  .appendQueryParameter("query", query);

次に、長い動的リンクを生成します。

Builder builder = new Builder()
  .scheme("https")
  .authority("zkkf4.app.goo.gl")
  .appendPath("")
  .appendQueryParameter("link", deepLink)
  .appendQueryParameter("apn", "com.mydomain.myapp");

次に、 https://firebasedynamiclinks.googleapis.com/v1/shortLinksで長い動的リンクを短いリンクと交換し、インテントを使用して共有します。

Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("text/plain");
intent.putExtra(Intent.EXTRA_TEXT, text);
startActivity(Intent.createChooser(intent, null));

Facebook アプリを使用してこのリンクを共有すると、次のようになります。

  • 短縮リンクは適切に共有されています。
  • アプリがインストールされていない場合、Facebook アプリのリンクをクリックすると Google Play に正しく移動し、アプリのインストール後にディープ リンクが正しく処理されます。
  • アプリがインストールされている場合、Facebook アプリのリンクをクリックすると Google Play にも移動し、[開く] ボタンをクリックした後、ディープ リンクはアプリに転送されません。インストールされていない場合、Google Play はリファラー情報をアプリに渡さないためです。実行されました。

Facebook Messenger アプリを使用してこのリンクを共有すると、次のようになります。

したがって、ここに 3 つの問題があります。

  • Facebook アプリは、アプリがインストールされていることを正しく検出していません。
  • Facebook Messenger アプリは、短いダイナミック リンクではなく長いダイナミック リンクを共有します。
  • Facebook Messenger アプリは、アプリがインストールされていることを検出できますが、アプリがインストールされていない場合、Google Play の代わりにリンクに移動します。

これらの問題を解決する方法について、何が起こっているのか誰にもわかりませんか?

PS: アプリでのディープ リンク処理が適切に機能しているため、これは関係ありませんが、これはマニフェスト インテント フィルターです。

  <intent-filter>
    <action android:name="android.intent.action.MAIN"/>
    <category android:name="android.intent.category.LAUNCHER"/>
  </intent-filter>

  <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"/>
    <data android:scheme="https"/>
    <data android:host="winged-guild-133523.appspot.com"/>
    <data android:host="www.winged-guild-133523.appspot.com"/>
    <data android:pathPattern="/share.*"/>
  </intent-filter>
于 2017-01-04T13:45:52.900 に答える
-1
//Remove this lines 
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE"/>

and  android:pathPattern=".*" /> //not required remove it also
and use android:scheme="http"
于 2016-12-19T12:55:11.420 に答える