处理多个活动的深层链接
Handling deeplinks with multiple activities
我的申请中有两个不同的活动。
<activity
android:name=".ui.login.LoginActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data
android:host="mysite.ua"
android:pathPattern="/.*/confirm-email-for-app"
android:scheme="https" />
<data
android:host="mysite.ua"
android:pathPattern="/.*/confirm-email-forgot-pwd-app"
android:scheme="https" />
</intent-filter>
</activity>
<activity
android:name=".ui.main.MainActivity">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data
android:host="mysite.ua"
android:scheme="https" />
</intent-filter>
</activity>
所以,我想要实现的是直接在 LoginActivity 中使用 LoginActivity 的 intent-filter 中概述的模式处理深度 links,而所有其他不适合 otlined 模式的 links 是在 MainActivity 中打开。
目前,所有不符合模式的 link 都可以在 MainActivity 中正确打开。但是当我尝试打开 link https://mysite.ua/ua/confirm-email-for-app 系统时,系统会显示带有两个应用程序实例的对话框。其中一个导致 LoginActivity,另一个导致 MainActivity。
我怎样才能避免这种情况?
我无法在 MainActivity 的 intent-filter 中定义所有路径模式,因为我的目标是在 MainActivity 中打开所有带有概述主机的 links(适合 LoginActivity 模式的那些除外)。
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data
android:host="mysite.ua"
android:pathPattern="/.*/confirm-email-for-app"
android:scheme="https" />
<data
android:host="mysite.ua"
android:pathPattern="/.*/confirm-email-forgot-pwd-app"
android:scheme="https" />
<data
android:host="mysite.ua"
android:scheme="https" />
</intent-filter>
</activity>
<activity
android:name=".ui.main.MainActivity">
</activity>
在 LoginActivity 中,在查询参数中获取动态数据并根据您的条件重定向。
以下是获取动态传递数据的代码Link
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();
Log.e(TAG, "onSuccess: check deep link url " + deepLink.toString());
String path = deepLink.getPath();
code = path.substring(path.lastIndexOf('/') + 1);
//check your condition and redirect according to that.
}
}
})
.addOnFailureListener(this, new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Log.w(TAG, "getDynamicLink:onFailure", e);
}
});
我的申请中有两个不同的活动。
<activity
android:name=".ui.login.LoginActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data
android:host="mysite.ua"
android:pathPattern="/.*/confirm-email-for-app"
android:scheme="https" />
<data
android:host="mysite.ua"
android:pathPattern="/.*/confirm-email-forgot-pwd-app"
android:scheme="https" />
</intent-filter>
</activity>
<activity
android:name=".ui.main.MainActivity">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data
android:host="mysite.ua"
android:scheme="https" />
</intent-filter>
</activity>
所以,我想要实现的是直接在 LoginActivity 中使用 LoginActivity 的 intent-filter 中概述的模式处理深度 links,而所有其他不适合 otlined 模式的 links 是在 MainActivity 中打开。
目前,所有不符合模式的 link 都可以在 MainActivity 中正确打开。但是当我尝试打开 link https://mysite.ua/ua/confirm-email-for-app 系统时,系统会显示带有两个应用程序实例的对话框。其中一个导致 LoginActivity,另一个导致 MainActivity。
我怎样才能避免这种情况?
我无法在 MainActivity 的 intent-filter 中定义所有路径模式,因为我的目标是在 MainActivity 中打开所有带有概述主机的 links(适合 LoginActivity 模式的那些除外)。
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data
android:host="mysite.ua"
android:pathPattern="/.*/confirm-email-for-app"
android:scheme="https" />
<data
android:host="mysite.ua"
android:pathPattern="/.*/confirm-email-forgot-pwd-app"
android:scheme="https" />
<data
android:host="mysite.ua"
android:scheme="https" />
</intent-filter>
</activity>
<activity
android:name=".ui.main.MainActivity">
</activity>
在 LoginActivity 中,在查询参数中获取动态数据并根据您的条件重定向。
以下是获取动态传递数据的代码Link
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();
Log.e(TAG, "onSuccess: check deep link url " + deepLink.toString());
String path = deepLink.getPath();
code = path.substring(path.lastIndexOf('/') + 1);
//check your condition and redirect according to that.
}
}
})
.addOnFailureListener(this, new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Log.w(TAG, "getDynamicLink:onFailure", e);
}
});