如何同时处理Firebase DynamicLink和简单的DeepLink?
问题描述:
我对谷歌文档感到困惑,同时处理简单的深度链接和Firebase动态链接。如何同时处理Firebase DynamicLink和简单的DeepLink?
要处理平原深层链接,我有这样的:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent intent = getIntent();
String action = intent.getAction();
Uri data = intent.getData();
parseDeepLink(data);
}
要添加火力动态链接(和火力程式邀请)的支持,该文档建议使用:
FirebaseDynamicLinks.getInstance()
.getDynamicLink(getIntent())
.addOnSuccessListener(this, new OnSuccessListener<PendingDynamicLinkData>() {
@Override
public void onSuccess(PendingDynamicLinkData pendingDynamicLinkData) {
if (pendingDynamicLinkData != null) {
Uri deepLink = pendingDynamicLinkData.getLink();
// Extract invite
FirebaseAppInvite invite = FirebaseAppInvite.getInvitation(pendingDynamicLinkData);
if (invite != null) {
String invitationId = invite.getInvitationId();
// handle invite
}
parseDeepLink(deepLink);
}
}
})
.addOnFailureListener(this, new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
finish();
}
});
然而,使用上面更新的代码,我无法接收简单的深度链接,因为pendingDynamicLinkData对于普通的深度链接始终为空。我应该在onFailure()
方法中使用parseDeepLink(getIntent().getData())
吗?
处理普通DeepLink和Firebase动态链接的正确方法是什么?
答
对于非动态的链接,你应该只使用
Uri data = intent.getData();
正如你之前。您可以在您的成功回调中检查,例如
if (pendingDynamicLinkData != null) {
Uri deepLink = pendingDynamicLinkData.getLink();
// Extract invite
FirebaseAppInvite invite = FirebaseAppInvite.getInvitation(pendingDynamicLinkData);
if (invite != null) {
String invitationId = invite.getInvitationId();
// handle invite
}
parseDeepLink(deepLink);
} else {
Uri data = intent.getData();
parseDeepLink(data);
}
是的,我目前正在这样做,即使用getIntent()。getData()if pendingDyanmicLinkData == null。我最初认为,普通的deepLinks会触发onFailure()方法而不是onSuccess()方法。我想知道这是否是正确的方式,或者是否有更好的优雅解决方案可用于此目的。任何想法onFailure()方法被触发?无论如何我都无法触发它。 – ArunL
如果失败是一个动态链接,但不能正确处理 - 真正的错误情况,不应该发生在正常流程中 –