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?
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