2017-09-05 109 views
0

我知道這個問題,但我有目標C和iOS原生開發沒有經驗陣營本土Twitter的登錄衝突FB和谷歌登錄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來支持谷歌或fb登錄

我怎樣才能處理所有請求也許通過函數重載,但如何?

回答

0

我找到了解決辦法

我將它們合併

- (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; 
    } 
    } 

附: 我使用下列庫

反應,本機fbsdk

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

0

您可以像這樣將它們組合起來:

- (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 signinreact native fbsdkreact native google signin