React Native Twitter 登录冲突 fb 和 google 登录 iOS

React Native Twitter Login conflict fb and google login iOS

我知道这个问题,但我没有 Objective C 和 iOS 本地开发的经验

我有两个方法同名参数不同

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



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


//function 2
    - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url options:(NSDictionary<NSString *,id> *)options {
        return [[Twitter sharedInstance] application:application openURL:url options:options];
      }

如果我这样定义两者,那么重定向后的所有 oauth 请求都会执行功能 2。如果我尝试将两者结合使用,则 Twitter 无法正常工作 Twitter 仅适用于功能 2 格式

//combine function 3
    - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation options:(NSDictionary<NSString *,id> *)options  {

  NSString *stringurl = url.absoluteString;
  NSString *sub = @"twitterkit";
  NSRange range = [stringurl  rangeOfString: sub options: NSCaseInsensitiveSearch];
  if (range.location != NSNotFound){
    return [[Twitter sharedInstance] application:application openURL:url options:options];
  }
  else{
  return [[FBSDKApplicationDelegate sharedInstance] application:application
                                                        openURL:url
                                              sourceApplication:sourceApplication
                                                     annotation:annotation
          ]
  || [RNGoogleSignin application:application
                         openURL:url
               sourceApplication:sourceApplication
                      annotation:annotation
      ];
  }
}

我无法向函数 2 添加额外的参数来支持 google 或 fb login

我怎样才能通过函数重载来处理所有请求,但如何处理呢?

我找到了解决方案

我合并它们

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url options:(NSDictionary<NSString *,id> *)options {
    NSString *stringurl = url.absoluteString;
    NSString *sub = @"twitterkit";
    NSRange range = [stringurl  rangeOfString: sub options: NSCaseInsensitiveSearch];
    if (range.location != NSNotFound){
    return [[Twitter sharedInstance] application:application openURL:url options:options];
    }
    else{
      BOOL handled = [[FBSDKApplicationDelegate sharedInstance] application:application openURL:url sourceApplication:options[UIApplicationOpenURLOptionsSourceApplicationKey] annotation:options[UIApplicationOpenURLOptionsAnnotationKey]
                      ] || [RNGoogleSignin application:application
                                               openURL:url
                                     sourceApplication:options[UIApplicationOpenURLOptionsSourceApplicationKey]
                                            annotation:options[UIApplicationOpenURLOptionsAnnotationKey]
                            ];;
      return handled;
    }
  }

P.S。 我正在使用以下库

react-native-fbsdk

https://differential.com/insights/meteor-google-oauth-from-react-native/ https://github.com/GoldenOwlAsia/react-native-twitter-signin

你可以这样组合它们:

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url options:(NSDictionary<NSString *,id> *)options {
    BOOL handled = [[FBSDKApplicationDelegate sharedInstance] application:application openURL:url sourceApplication:options[UIApplicationOpenURLOptionsSourceApplicationKey] annotation:options[UIApplicationOpenURLOptionsAnnotationKey]
                    ] || [RNGoogleSignin application:application
                                             openURL:url
                                   sourceApplication:options[UIApplicationOpenURLOptionsSourceApplicationKey]
                                          annotation:options[UIApplicationOpenURLOptionsAnnotationKey]
                          ]
                      || [[Twitter sharedInstance] application:application openURL:url options:options];
    return handled;
}

我正在使用:

react native twitter signin , react native fbsdk and react native google signin