我在 ios 应用程序中使用 branch.io SDK。我们使用它来邀请用户使用我们的应用程序,并在分支链接出现时将他们重定向到自定义的入职屏幕。我们注意到的一件事是,在应用程序打开和分支的处理程序被调用之间有一点延迟。
这意味着我的应用程序加载它通常的开始屏幕,然后可能半秒后分支的代码运行并且我的应用程序重定向到正确的视图。我看到 LaunchScreen,我的登录屏幕半秒钟,然后是我的 branch.io 处理程序视图。所有这些都是正确的,但我想知道如何更好地构建它,以便没有初始登录屏幕视图?
分支块和普通应用程序的启动块也可能存在竞争条件——这两者都是异步的。现在分支块总是需要更长的时间,所以没什么大不了的。
我的一些想法:
1) 创建一个类似于应用程序登陆的 LaunchScreen 的初始视图,直到 branch.io 返回,人为地扩展启动屏幕而不是显示登录屏幕。这里的问题是,这也需要 Branch.io 触发 non-branch.io 延续,这意味着所有条目都有半秒的延迟。不好。如果我还需要网络调用,延迟可能会更长,微调器对这个过程没有帮助。
2)在branch.io处理程序中嵌入AuthManager登录状态代码,使正常的app进程串行运行到分支;而不是同时运行异步。再一次,这会造成必须处理的延迟,否则只会出现半秒的白屏。它还将我整个应用程序的加载成功与 branch.io 的 SDK 按预期工作联系起来,而不是我更喜欢依赖任何 SDK。
有没有更好的方法来构建这个工作流程?
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
//...
// initialize branch.io
Branch *branch = [Branch getInstance];
[branch initSessionWithLaunchOptions:launchOptions andRegisterDeepLinkHandler:^(NSDictionary *params, NSError *error) {
// do stuff with branch, such as redirect to a custom View.
// run every load and handled if branch.io link present
// possible network call(s) involved if branch link present.
}];
// ...
[[AuthManager sharedInstance] isLoggedInCompletionHandler:^{
// load HomeViewController (logged in)
} notLoggedInCompletionHandler:^{
// load LoginViewController (not logged in)
}];
}