Firebase PendingDynamicLinkData in Android is null



以下是我所做的全部步骤:

  1. 已用以下内容更新firebase.json

    "appAssociation": "AUTO", "rewrites": [ { "source": "/product/**", "dynamicLinks": true } ]

  2. 我的网站域example.com托管在Firebase中。因此,上传firebase.json使用firebase部署--仅托管

  3. Firebase动态链接中添加了以下动态URL前缀

    https://example.com/product

Firebase动态链接屏幕截图

  1. build.gradle(:app(文件中实现bom、动态链接和分析
implementation platform('com.google.firebase:firebase-bom:29.0.3')
implementation 'com.google.firebase:firebase-dynamic-links'
implementation 'com.google.firebase:firebase-analytics'
  1. 使用以下代码创建了动态链接:
private void handleFirebaseDynamicLink() {
DynamicLink dynamicLink = FirebaseDynamicLinks.getInstance().createDynamicLink()
.setLink(Uri.parse("https://example.com/product/?productSKU=" + ProductSKU))
.setDomainUriPrefix("https://example.com/product/")
.setAndroidParameters(
new DynamicLink.AndroidParameters.Builder("com.myapp.myapp").build())
.buildDynamicLink();

try {
String url = URLDecoder.decode(dynamicLink.getUri().toString(), "UTF-8");
Log.d(TAG, "handleFirebaseDynamicLink: " + url);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
  1. 根据上述方法生成的动态链接为:
https://example.com/product/?apn=com.myapp.myapp&link=https://example.com/product/?productSKU=SKU-0004
  1. 要接收动态链接,请在AndroidManifest.xml文件中为我的活动创建以下意向过滤器:
<activity
android:name=".Product_Details">
<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:pathPrefix="/product"
android:scheme="https" />
</intent-filter>
</activity>
  1. 通过调用onCreate((中的方法-
//Fetching productSKU
fetchProductSKU(getIntent());

接收动态链接如下:

private void fetchProductSKU(Intent intent) {
if (intent.getAction() != null) {
if (intent.getAction().equals(Intent.ACTION_VIEW)) {
FirebaseDynamicLinks.getInstance()
.getDynamicLink(intent)
.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.d(TAG, "handleFirebaseDynamicLink: " + deepLink);
} else {
Log.d(TAG, "handleFirebaseDynamicLink: pendingDynamicLinkData null");
}

// Handle the deep link. For example, open the linked
// content, or apply promotional credit to the user's
// account.
// ...
// ...
}
})
.addOnFailureListener(this, new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Log.w(TAG, "getDynamicLink:onFailure", e);
}
});
}
}
}
  1. 在我的物理移动设备上使用ADB Shell命令,我使用以下内容测试动态链接-
adb shell am start -a android.intent.action.VIEW -c android.intent.category.BROWSABLE -d "https://example.com/product/?apn=com.myapp.myapp&link=https://example.com/product/?productSKU=SKU-0004"
  1. 这反过来启动预期的"活动"。但是,pendingDynamicLinkData返回null
2022-01-03 17:29:15.141 12914-12914/com.myapp.myapp D/Product_Details: handleFirebaseDynamicLink: pendingDynamicLinkData null
  1. 我试过了-

a。使用不同的动态链接前缀,如-/product(结尾没有"/",如/project(,没有查询参数/?productSKU="+.setLink.setDomainUriPrefix末尾的ProductSKU,同时构建动态链接

b。通过仅使用dynamicLink.getUri((.toString;UTF-8"(方法。

  1. 以上操作均无效。如有任何帮助,我们将不胜感激

经过更多的研究和调试,在通过ADB进行测试的过程中,Android中似乎有意删除了URL中的多个参数。但是,仅保留第一个参数。

因此,在我的情况下,仅保存apn参数,而有意删除link参数。因此,pendingDynamicLinkData返回null。

如果通过电子邮件发送,生成的动态链接效果良好。

通过以下线程解释了在android中删除多个参数的意图:

Android深度链接与多个查询参数

相关内容

  • 没有找到相关文章

最新更新