AppDelegate.m for both FBSDK and LinkingManager

前端 未结 3 1720
失恋的感觉
失恋的感觉 2021-02-20 05:24

To use FBSDK I need this snippet in app delegate

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url 
    sourceApplication:(NSString *)sourceA         


        
相关标签:
3条回答
  • 2021-02-20 05:38

    Of course, you can implement this method only once in your AppDelegate.

    [[FBSDKApplicationDelegate... and [RCTLinkingManager... both return a BOOL.

    You can put both snippets in the same method. I would suggest to return YES, if both [RCTLinkingManager... and [[FBSDKApplicationDelegate... return YES. Otherwise, return NO.

    It could look like this:

    - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url 
        sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
    
      BOOL handledFB = [[FBSDKApplicationDelegate sharedInstance] application:application
        openURL:url
        sourceApplication:sourceApplication
        annotation:annotation
      ];
    
      BOOL handledRCT = [RCTLinkingManager application:application openURL:url sourceApplication:sourceApplication annotation:annotation];
    
      return handledFB || handledRCT;
    }
    

    I can't guarantee, that you can use FBSDKApplicationDelegate and RCTLinkingManager in the same app, because I have never worked with this. But your code should at least compile.

    0 讨论(0)
  • 2021-02-20 05:41

    For those who are using RNFirebase Linking:

    - (BOOL)application:(UIApplication *)application
    openURL:(NSURL *)url
    options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options {
      
      BOOL handledFB = [[FBSDKApplicationDelegate sharedInstance]
                        application:application
                        openURL:url
                        sourceApplication:options[UIApplicationOpenURLOptionsSourceApplicationKey]
                        annotation:options[UIApplicationOpenURLOptionsAnnotationKey]];
      
      BOOL handledRCT = [RCTLinkingManager application:application openURL:url options:options];
    
      if (!handledRCT) {
          handledRCT = [[RNFirebaseLinks instance] application:application openURL:url options:options];
      }
    
      return handledFB || handledRCT;
    }
    
    0 讨论(0)
  • 2021-02-20 05:52

    Wow, exactly what I was looking for! The accepted answer works great, except for a slight variation, since my FBSDK implementation is different (newer?). Because it uses:
    options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options {

    I just tried to use the same parameters as FBSDK, and it works!

        sourceApplication:options[UIApplicationOpenURLOptionsSourceApplicationKey]
        annotation:options[UIApplicationOpenURLOptionsAnnotationKey]
    

    Full method:

    - (BOOL)application:(UIApplication *)application
                openURL:(NSURL *)url
                options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options {
    
      BOOL handledFB = [[FBSDKApplicationDelegate sharedInstance] application:application
        openURL:url
        sourceApplication:options[UIApplicationOpenURLOptionsSourceApplicationKey]
        annotation:options[UIApplicationOpenURLOptionsAnnotationKey]
      ];
    
      BOOL handledRCT = [RCTLinkingManager application:application
        openURL:url
        sourceApplication:options[UIApplicationOpenURLOptionsSourceApplicationKey]
        annotation:options[UIApplicationOpenURLOptionsAnnotationKey]
      ];
    
      return handledFB || handledRCT;
    }
    

    RN 0.59.x

    0 讨论(0)
提交回复
热议问题