为什么android应用程序动态创建的“动态链接”不能直接打开应用程序?

mag*_*man 0 android firebase firebase-dynamic-links

问题: 为什么以编程方式创建的“短动态链接”不会直接打开/启动应用程序?

但是在控制台创建的链接只显示一个选择浏览器的提示,然后应用程序直接启动。

我想在用户单击由 android 应用程序动态创建的动态 url 时直接启动应用程序。

单击由 android 应用程序动态创建的动态短链接时,会发生以下情况,

1.在浏览器中打开的选项显示

2.浏览器打开,显示加载对话框

3.再次显示在浏览器中打开的选项(这次应用程序显示在更多选项区域)

4.点击浏览器打开网站,点击应用启动应用但深层链接丢失。

任何帮助都会很棒。


清单文件

...
 <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="notifika.tupio.me"
       android:scheme="https" />
 </intent-filter>
...
Run Code Online (Sandbox Code Playgroud)

链接生成

  public void createDynamicLink(final Context context, final SingleNotification notification){
    final Uri[] mInvitationUrl = {null};
    String link = "https://notifika.tupio.me/?public=" + notification.getTag();
    FirebaseDynamicLinks.getInstance().createDynamicLink()
            .setLink(Uri.parse(link))
            .setDynamicLinkDomain("notifika.page.link")
            .setAndroidParameters(
                    new DynamicLink.AndroidParameters.Builder("me.tupio.notifika")
                            .build())
            .setGoogleAnalyticsParameters(
                    new DynamicLink.GoogleAnalyticsParameters.Builder()
                            .setSource("In-App")
                            .setMedium("social")
                            .setCampaign("Word-Word")
                            .build())
            .setSocialMetaTagParameters(
                    new DynamicLink.SocialMetaTagParameters.Builder()
                            .setTitle("Notifika")
                            .setDescription("Sent and Receive Notification like this.Download the app now")
                            .build())

            .buildShortDynamicLink()
            .addOnSuccessListener(new OnSuccessListener<ShortDynamicLink>() {
                @Override
                public void onSuccess(ShortDynamicLink shortDynamicLink) {
                    mInvitationUrl[0] = shortDynamicLink.getShortLink();
                    Intent intent = new Intent();
                    intent.setAction(Intent.ACTION_SEND);
                    intent.setType("text/plain");
                    intent.putExtra(Intent.EXTRA_TEXT, notification.getTitle()+"\n"+notification.getMessage().substring(0, Math.min(notification.getMessage().length(), 100)) + "..." +context.getResources().getString(R.string.share_link_desc)+"\n"+mInvitationUrl[0]);
                    context.startActivity(Intent.createChooser(intent, "Share"));
                }
            });

}
Run Code Online (Sandbox Code Playgroud)

主Activity.class

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();
                        Log.v("Deeplink",deepLink.toString());
                    }
                    //
                    // If the user isn't signed in and the pending Dynamic Link is
                    // an invitation, sign in the user anonymously, and record the
                    // referrer's UID.
                    //
                    if (deepLink != null
                            && deepLink.getBooleanQueryParameter("public",false)) {
                        String referrerUid = deepLink.getQueryParameter("public");
                        Log.v("Deeplink", referrerUid);
                       Toast.makeText(getApplicationContext(),referrerUid,Toast.LENGTH_LONG).show();
                    }
                }
            });
Run Code Online (Sandbox Code Playgroud)

遵循了指南。

Ian*_*ber 5

您还需要为 page.link/app.goo.gl 域添加一个 Intent 过滤器,以便深层链接直接指向您的应用。请参阅:https : //firebase.google.com/docs/dynamic-links/android/receive#app_links