【发布时间】:2022-01-03 11:45:12
【问题描述】:
以下是我所做的完整步骤:
-
已将 firebase.json 更新为以下内容:
"appAssociation": "AUTO", "rewrites": [ { "source": "/product/**", "dynamicLinks": true } ] -
我的网站域 example.com 托管在 Firebase 中。因此,使用 firebase deploy --only hosting
上传 firebase.json -
在Firebase 动态链接
中添加了以下动态网址前缀https://example.com/product
Screenshot of Firebase Dynamic Link
- 在 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'
- 使用以下代码创建了一个动态链接:
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();
}
}
- 上述方法生成的动态链接为:
https://example.com/product/?apn=com.myapp.myapp&link=https://example.com/product/?productSKU=SKU-0004
- 为了接收动态链接,我在 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>
- 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);
}
});
}
}
}
- 在我的物理移动设备上使用 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"
- 这又会启动预期的活动。但是,pendingDynamicLinkData 返回 null。
2022-01-03 17:29:15.141 12914-12914/com.myapp.myapp D/Product_Details: handleFirebaseDynamicLink: pendingDynamicLinkData null
- 我试过了-
一个。使用不同的动态链接前缀,例如 - /product(末尾没有“/”,例如 /product/ ),在 .setLink 和 末尾没有查询参数 /?productSKU=" + ProductSKU >.setDomainUriPrefix 同时建立动态链接,
b.通过仅使用 dynamicLink.getUri().toString() 而不是 URLDecoder.decode(dynamicLink.getUri().toString 转换创建的动态链接(), "UTF-8") 方法。
- 上述方法均无效。任何帮助将不胜感激。
【问题讨论】:
标签: java android firebase null firebase-dynamic-links