当应用程序从自定义 URL 启动/安装时,我们使用 Branch 为我们的用户提供自定义体验。这种自定义体验必须可供新用户(下载应用程序并首次注册的用户)和已安装应用程序的登录用户使用。
这种定制体验对我们来说是强制性的。如果用户单击此 URL,则必须正确提示他。
我们有两个活动:
活动 A是启动器活动。它用作路由活动。这意味着如果用户登录或使用经典的登录和注册按钮提示他,它将在本地显示。
活动 B是家庭活动。它由 Activity A 在以下情况下启动: - 用户已经登录 - 用户登录 - 用户注册 这是“自定义”体验发生的地方(用户在单击 URL 后进入应用程序时会收到一个对话框提示) .
在活动 A 中,我使用以下方法在 onStart() 中检索 Branch 提供的信息:
branch.initSession(new Branch.BranchReferralInitListener()
{
@Override
public void onInitFinished(JSONObject referringParams, BranchError error)
{
// Searches through the JSONObject for key/value pairs...
}
};
同时,我启动了一个 Handler/Runnable 对,当回调需要很长时间才能触发时(即:当网络非常慢时),它作为超时。如果出现问题,这可以防止启动屏幕显示几分钟。
但是通过这样做,我不觉得我做事的方式很好。
假设我的闪屏超时设置为 10 秒,并且仅在 15 秒后调用回调。如果用户已经登录,那么只要Activity A的 10 秒结束,他就会被重定向到Activity B。因此,主屏幕上的对话框将永远不会提示他。
当路由取决于可以持续 n 秒的异步工作时,处理活动路由的正确方法是什么?