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

时间:2016-01-27 20:21:26

标签: ios ios9 deep-linking url-scheme openurl

我在iOS 9中的登录系统有一个奇怪的重定向应用程序问题。

现在,我已经允许使用abitrary,我的url方案在我的plist文件中正确设置。

这是怎么回事:

  • 将用户带到SFSafariViewController以使用facebook / google
  • 登录
  • 用户输入凭据(如果已经缓存,则输入凭证)
  • 如果用户的凭据被缓存,或者卡在最终的google / facebook登录页面上,用户就会被卡在空白页面上,而不是被重定向到我们的应用程序。不会出现“在应用程序中打开”对话框,并且不会调用openUrl AppDelegate函数。

现在,如果用户关闭了SFSafariViewController,返回到我们的应用程序登录页面并尝试再次登录,每次从那里重定向到应用程序并且每次调用openUrl AppDelegate方法。

请注意,在iOS9上,我们之前已将应用程序外部重定向到Safari以完成登录过程(而不是使用SFSafariViewController)并遇到相同的问题,而“在应用程序中打开”弹出窗口重定向到应用程序只会在第二次登录尝试时显示。

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

OAuth登录后发送到应用的重定向网址在首次登录尝试时都是相同的。

有没有人在iOS 9上遇到过这样的问题?

2 个答案:

答案 0 :(得分:3)

正如你所提到的关于Facebook,所以

  1. 首先,猜测你错过了来自 UIApplicationDelegate application:openURL:sourceApplication:annotation:

  2. FBSDKApplicationDelegate application:openURL:options:的召唤
  3. 您可能会在 UIApplicationDelegate的 NSURL *url = [launchOptions objectForKey:UIApplicationLaunchOptionsURLKey];

  4. 中遗漏这一行didFinishLaunchingWithOptions
  5. 交叉检查您是否按照此https://developers.facebook.com/docs/ios/ios9

  6. 中的说明进行了设置
  7. 如果设备是Jailbreak,那么在iOS 9.0.2中会导致网址方案问题。

  8. 对我有用的解决方案是以下代码行,因为我在我的应用程序中集成了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];
       }
    

答案 1 :(得分:0)

I Had experience with deep linking issues In my case the root of the problem is that we had the CFBundleIdentifier set in the info.plist to a blank String "" by deleting it or setting it to you apps name it fixed our routing issues.

Hope that helps.