问题:为什么以编程方式创建的“短动态链接”无法直接打开/启动应用程序?
当用户单击由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`
]
答案 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>
然后在您的活动中,使用以下代码获取链接:
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在同一活动中起作用。