深度链接重定向到应用程序仅适用于iOS 9及以上的第二次尝试

我在iOS 9中只能使用我们的登录系统对应用程序发出一个奇怪的重定向.

现在,我已经有了有效的有效载荷,我的网址计划在我的plist文件中正确设置.

这是怎么回事?

>一个用户被带到一个SFSafariViewController登录用Facebook /谷歌
>用户输入他的凭据(如果他们已被缓存)
而不是被重定向到我们的应用程序,用户被卡在一个空白的页面,如果他的凭据被缓存,或卡在最终的谷歌/ Facebook登录页面.不出现“打开应用程序”对话框,并且未调用openUrl AppDelegate函数.

现在,如果用户关闭SFSafariViewController,请回到我们的应用程序登录页面,并尝试再次登录第二次,每次从该处重新启动应用程序,每次都调用openUrl AppDelegate方法.

请注意,在iOS9上,我们以前将应用程序重定向到Safari以完成登录过程(而不是使用SFSafariViewController),并且具有相同的问题,而“在应用程序中打开”弹出窗口将重定向到该应用程序将仅显示在第二次登录尝试及以上.

这只是在iOS 9上发生.在iOS 8中,此问题不会出现,我们的用户登录后总是被重定向到该应用.

OAuth登录后发送到应用程序的重定向网址在首次登录尝试中相同.

有没有人在iOS 9上出现这样的问题?

解决方法

正如你在Facebook上提到过的那样

>首先,猜测你错过了FBSDKApplicationDelegate应用程序的调用:openURL:sourceApplication:annotation:来自UIApplicationDelegate的应用程序:openURL:options:
>你可能会错过这一行NSURL * url = [launchOptions objectForKey:UIApplicationLaunchOptionsURLKey];在UIApplicationDelegate的didFinishLaunchingWithOptions
>交叉检查您已按照https://developers.facebook.com/docs/ios/ios9中提到的设置
>如果设备是越狱,那么在iOS 9.0.2中会导致url方案问题.

为我工作的解决方案是下面的代码行,因为我将FB / G与我的应用程序集成在一起:

- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<Nsstring*,id> *)options {
    return [[FBSDKApplicationDelegate sharedInstance] application:app
                                                          openURL:url
                                                sourceApplication:options[UIApplicationopenURLOptionsSourceApplicationKey]
                                                       annotation:options[UIApplicationopenURLOptionsAnnotationKey]]
            || [[GIDSignIn sharedInstance] handleURL:url
                                   sourceApplication:options[UIApplicationopenURLOptionsSourceApplicationKey]
                                          annotation:options[UIApplicationopenURLOptionsSourceApplicationKey]];
}
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(Nsstring *)sourceApplication annotation:(id)annotation
{

        return [[FBSDKApplicationDelegate sharedInstance] application:application
                                                          openURL:url
                                                sourceApplication:sourceApplication
                                                       annotation:annotation
                 ] ||
                [[GIDSignIn sharedInstance] handleURL:url
                                          sourceApplication:sourceApplication
                                                 annotation:annotation];
   }

相关文章

UITabBarController 是 iOS 中用于管理和显示选项卡界面的一...
UITableView的重用机制避免了频繁创建和销毁单元格的开销,使...
Objective-C中,类的实例变量(instance variables)和属性(...
从内存管理的角度来看,block可以作为方法的传入参数是因为b...
WKWebView 是 iOS 开发中用于显示网页内容的组件,它是在 iO...
OC中常用的多线程编程技术: 1. NSThread NSThread是Objecti...