适用于FBSDK和LinkingManager的AppDelegate.m

man*_*nni 10 objective-c ios react-native

要使用FBSDK,我需要在app delegate中使用此代码段

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

  BOOL handled = [[FBSDKApplicationDelegate sharedInstance] application:application
    openURL:url
    sourceApplication:sourceApplication
    annotation:annotation
  ];
  // Add any custom logic here.
  return handled;
}
Run Code Online (Sandbox Code Playgroud)

要使用LinkingManager,我需要在app delegate中使用此代码段

#import "RCTLinkingManager.h"

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url
  sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
  return [RCTLinkingManager application:application openURL:url
                      sourceApplication:sourceApplication annotation:annotation];
}
Run Code Online (Sandbox Code Playgroud)

他们显然是重复的.我如何将两者结合起来使两个库都有效?我不知道任何Objective-C

Fel*_*SFD 13

当然,您只能在您的方法中实现此方法一次AppDelegate.

[[FBSDKApplicationDelegate...并且[RCTLinkingManager...均会返回BOOL.

您可以将两个片段放在同一个方法中.我会建议返回YES,如果两者[RCTLinkingManager...[[FBSDKApplicationDelegate...返回YES.否则,返回NO.

它可能看起来像这样:

- (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;
}
Run Code Online (Sandbox Code Playgroud)

我不能保证,你可以使用FBSDKApplicationDelegateRCTLinkingManager在相同的应用程序,因为我从来没有与这个工作.但是你的代码至少应该编译.

  • 刚刚遇到了同样的问题,这仍然适用于React 16和React Native 0.49.3 (2认同)