【问题标题】:Handling different URL Schemes in iOS (Facebook and Instagram)在 iOS(Facebook 和 Instagram)中处理不同的 URL 方案
【发布时间】:2013-04-25 23:13:16
【问题描述】:

我什至不知道如何定义问题,但就是这样。

我有一个使用 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=BAAGKI2vHLxUBANbDegkrdoc4GJWUZC2clqLAzxz8IxEBZBdEyjrD2oTaGZA0g2AbSGWgvEhONKM6xJWzLCALGUBguqUpor6kXu95ZBewusNZCUe66662

instagram 是这样的:

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

【问题讨论】:

    标签: ios appdelegate openurl


    【解决方案1】:
        - (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;
        }
    

    【讨论】:

    • 你在输入图片描述中放了什么
    • 不需要。 URL 方案很重要。
    【解决方案2】:

    斯威夫特:-

    在 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)
    
       }
    }
    

    【讨论】:

      【解决方案3】:

      对于 Swift 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
          }
      

      【讨论】:

        【解决方案4】:

        我想我找到了

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

        Xcode - multiple URL Schemes

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-07-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-07-28
          • 2011-05-23
          相关资源
          最近更新 更多