添加Facebook URLScheme后,URLScheme停止工作

时间:2018-03-12 08:27:56

标签: ios swift url-scheme today-extension

我使用URL方案从今天的小部件打开应用程序。 一切正常 - 当轻触小部件,加载应用程序并执行AppDelegate中的此方法时。

func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool {}

后来我添加了facebook登录的url方案,app仍然是从widget打开的,但AppDelegate的这个方法没有被执行。 Facebook登录工作正常。

关于网址方案的我的info.plist部分现在看起来像这样。

<key>CFBundleURLTypes</key>
<array>
    <dict>
        <key>CFBundleTypeRole</key>
        <string>Editor</string>
        <key>CFBundleURLSchemes</key>
        <array>
            <string>MY_URL_SCHEME</string>
            <string>fb{someid}</string>
        </array>
    </dict>
</array>

更新 我发现Facebook在AppDelegate中也需要这种方法

@available(iOS 9.0, *)
func application(_ application: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any]) -> Bool {
    return SDKApplicationDelegate.shared.application(application, open: url, options: options)
}

因此它也捕获了从小部件启动。我应该如何使用这两种方法?

2 个答案:

答案 0 :(得分:1)

在让facebook处理网址之前,你可以检查它是不是你的fb方案:

    if (url?.scheme == "your_fb_scheme") {
        return FBSDKApplicationDelegate.sharedInstance().application(application, openURL: url, sourceApplication: sourceApplication, annotation: annotation)
    }
    //have your own logic here

答案 1 :(得分:1)

我们无法在AppDelegate中实现这两种方法。从iOS 9.0开始,引入了以下方法。

这个代表在选项词典中有一堆键,如&#34; UIApplicationOpenURLOptionsKey&#34;,&#34; UIApplicationOpenURLOptionsAnnotationKey&#34;等你可以根据自己的需要使用。 你可以使用字典&#34;选项&#34;用这样的方法给出: -

-(BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options{

 if ([url.scheme isEqualToString:@"YOUR_FACEBOOK_ID"]){
     return [[FBSDKApplicationDelegate sharedInstance] application:app openURL:url sourceApplication:options[UIApplicationOpenURLOptionsSourceApplicationKey] annotation:options[UIApplicationOpenURLOptionsAnnotationKey]];
 }

   return NO;

}

SWIFT代码: -

func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {

   if url.scheme == "YOUR_FACEBOOK_ID"{
      return FBSDKApplicationDelegate.sharedInstance().application(app, open: url, sourceApplication: options[.sourceApplication] as! String!, annotation: options[.annotation])
    }

    return false

}