6

我什至不确定如何定义问题,但它就在这里。

我有一个使用 Facebook SDK 进行用户登录的应用程序。我遵循了 Facebook 授权教程。我不是 100% 确定它是如何工作的,但我的“AppDelegate.m”中的这一部分似乎很重要。

- (BOOL)application:(UIApplication *)application
            openURL:(NSURL *)url
  sourceApplication:(NSString *)sourceApplication
         annotation:(id)annotation {

    return [FBSession.activeSession handleOpenURL:url];
}

到目前为止,一切都很好。现在我想为 instagram 实现类似的登录,以便用户可以访问他们的照片。我运行这个例子没有问题(https://github.com/crino/instagram-ios-sdk)。当我尝试将其导入我的项目时,我被卡住了。因为在instagram项目中还有一个函数在AppDelegate(IGAppDelegate)

-(BOOL)application:(UIApplication *)application
           openURL:(NSURL *)url
 sourceApplication:(NSString *)sourceApplication
        annotation:(id)annotation {

    return [self.instagram handleOpenURL:url];
}

现在我不能使用这个功能(因为它是 Facebook 的一个副本)有没有一种方法可以将这两个功能结合起来用于 facebook 和 instagram(可能对于不同的 URL 使用“if”)。还是我迷路了

PS:我注意到当我调用我的 Facebook 登录应用程序时,网址类似于

fb4333597123414933 ://authorize/#access_token=BAAGKI2vHLxUBANbDegkrdoc4GJWUZC2clqLAzxz8IxEBZBdEyjrD2oTaGZA0g2AbSGWgvEhONKM6xJWzLCALGUBguqUpor6kXu9ZBewusNZCUe6BOXYvX&expires_in=

在 Instagram 中是这样的:

igfd725621c5e44198a5b8ad3f7a0ffa09 ://authorize#access_token=354172840.fd72562.bf6b3611632d4d00b6cef660ea9d9b6f

4

4 回答 4

10
    - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
    {
        NSLog(@"url: %@", [url scheme]);
        
        BOOL callBack;
        // Facebook Call back checking.
        if ([[url scheme] isEqualToString:@"facebook_url_schema"])
        {
            callBack = [FBAppCall handleOpenURL:url sourceApplication:sourceApplication];
        }
        // Instagram call back checking.
        else if ([[url scheme] isEqualToString:@"instagram_url_schema"])
        {
            callBack = [self.instagram handleOpenURL:url];
        }
        return callBack;
    }

于 2015-02-19T12:37:46.547 回答
4

斯威夫特:-

在 swift 应用中同时使用 Google+ 和 Facebook 的示例,它们都需要 appDelegate 中的 OpenURL 方法。

func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?,
    annotation: AnyObject?) -> Bool {

   println("URL : \(url)")
   if(url.scheme!.isEqual("fb1627825840806667")) {
        println("Facebook url scheme")

    return FBSDKApplicationDelegate.sharedInstance().application(
            application,
            openURL: url,
            sourceApplication: sourceApplication,
            annotation: annotation)

   } else {

        println("Google+ url scheme")

       return GIDSignIn.sharedInstance().handleURL(url, sourceApplication: sourceApplication, annotation: annotation)

   }
}
于 2015-09-18T06:24:42.770 回答
2

对于斯威夫特 2.0

//MARK: FACEBOOK , GOOGLE CALLBACK URL METHOD
    //google-Firebase signin - IOS 8
    func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject) -> Bool
    {
        let googleDidHandle = GIDSignIn.sharedInstance().handleURL(url, sourceApplication: sourceApplication!, annotation: annotation)

        let facebookDidHandle = FBSDKApplicationDelegate.sharedInstance().application(application, openURL: url, sourceApplication: sourceApplication, annotation: annotation)

        return facebookDidHandle || googleDidHandle
    }

    //google-Firebase signin - IOS 9
    @available(iOS 9.0, *)
    func application(application: UIApplication,
                     openURL url: NSURL, options: [String: AnyObject]) -> Bool {

        let facebookDidHandle = FBSDKApplicationDelegate.sharedInstance().application(application, openURL: url, sourceApplication: options[UIApplicationOpenURLOptionsSourceApplicationKey] as! String, annotation: options[UIApplicationOpenURLOptionsAnnotationKey])

        let googleDidHandle = GIDSignIn.sharedInstance().handleURL(url, sourceApplication: options[UIApplicationOpenURLOptionsSourceApplicationKey] as! String, annotation: options[UIApplicationOpenURLOptionsAnnotationKey])

        return facebookDidHandle || googleDidHandle
    }
于 2017-12-28T11:39:29.313 回答
0

我想我找到了

[url scheme] 给出那些特定的 URL 方案

Xcode - 多个 URL 方案

于 2013-04-26T00:28:35.530 回答