android firebase动态链接PendingDynamicLinkData通过应用程序直接为null

时间:2018-11-15 07:49:19

标签: android firebase firebase-dynamic-links deeplink dynamic-links

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

当用户单击由android应用程序动态创建的动态网址时,我想直接启动应用程序。

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

1.Option显示两个选项,一个是通过chrome,另一个是通过应用

2。如果我选​​择chrome选项,则会打开浏览器,显示一个加载对话框,并使用PendingDynamicLinkData数据启动应用程序

3。但是,如果我选择应用程序选项,则应用程序启动应用程序,但PendingDynamicLinkData丢失或为空。

任何帮助都会很棒。我的清单设置在下面

columnDefs: [
    { name: 'id', width: 100},                               
    { name: 'address', width: 100 },
    { name: 'street', width: 100 },
    { name: 'delete', cellTemplate: '<button class="btn primary" ng-click="grid.appScope.deleteRow(row)">Delete</button>' }`enter code here`
  ]

3 个答案:

答案 0 :(得分:0)

您应该在活动中处理PendingDynamicLinkData,以覆盖onCreate和onNewIntent。像这样:

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

答案 1 :(得分:0)

我不知道正确的解决方案,但是我发现了一个可行的技巧。 首先,请确保已将以下意图过滤器添加到应该处理动态链接的活动中:

    <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

然后在您的活动中,使用以下代码获取链接:

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

答案 2 :(得分:0)

在清单中,将以下意图过滤器添加到将处理url的活动中:

覆盖目标活动的OnStart方法

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

完整指南here。 出于某种原因,我无法使其与动作MAIN在同一活动中起作用。