Search code examples
iosobjective-creact-nativetwitter-oauth

React Native Twitter Login conflict fb and google login iOS


I know the problem but i have no experience with Objective C and iOS native development

I have two method same name argument different

//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];
      }

If i define both like this then both all oauth request after redirect come to function 2. If i try to combine both then twitter not working Twitter only works on function 2 format

//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
      ];
  }
}

I cannot add extra argument to function 2 to support google or fb login

How can i handle all request maybe through function overloading but how?


Solution

  • I found the solution

    I merge them

    - (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. I am using following libraries

    react-native-fbsdk

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