反应本机深层链接与Facebook SDK conflct

erd*_*tom 9 facebook objective-c react-native

我在我的react-native应用程序中使用Facebook SDK,现在我想添加对通用深度链接的支持.

我根据以下说明修改了我的appdelegate:https://developers.facebook.com/docs/ios/getting-started/

对于深层链接,我试图遵循这个:https://facebook.github.io/react-native/docs/linking.html

但是,它们似乎都使用相同的方法,我不确定如何调和:

````

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

````

请告诉我如何修改方法以获得这两种功能.

谢谢

Asa*_*vid 10

这就是我设法解决问题的方法:

- (BOOL)application:(UIApplication *)application
            openURL:(NSURL *)url
            options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options {

  NSString *myUrl = url.absoluteString;
  if ([myUrl containsString:@"PLACE_YOUR_FB_APP_ID_HERE"]) {
    return [[FBSDKApplicationDelegate sharedInstance] application:application
                                                                openURL:url
                                                      sourceApplication:options[UIApplicationOpenURLOptionsSourceApplicationKey]
                                                             annotation:options[UIApplicationOpenURLOptionsAnnotationKey]
                  ];
  } else {
    return [RCTLinkingManager application:application openURL:url options:options];
  }
}
Run Code Online (Sandbox Code Playgroud)

只需用PLACE_YOUR_FB_APP_ID_HEREinfo.plist中的字符串替换即可.例如,在下面的例子中它的fb9999999999:

  <array>
    <dict>
      <key>CFBundleURLSchemes</key>
      <array>
        <string>fb9999999999</string>
      </array>
    </dict>
  </array>
Run Code Online (Sandbox Code Playgroud)


erd*_*tom 1

最终编写了一个简单的 if 语句来查看传入的 URL 是否是 Facebook 的 URL,如果是,则返回 FBSDKApplicationDelegate,如果不是,则返回 RCTLinkingManager 对象。