You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React Native集成FBSDK报错:未声明标识符'FBSDKApplicationDelegate'

解决React Native集成FBSDK时「use of undeclared identifier 'FBSDKApplicationDelegate'」错误

可能的原因及对应解决方案

1. 确认FBSDK依赖是否正确安装

  • 检查Podfile中是否包含FBSDKCoreKit,执行pod install完成依赖安装:
    pod 'FBSDKCoreKit'
    
    终端执行命令:
    cd ios && pod install && cd ..
    
  • 若使用react-native-fbsdk-next(当前RN官方推荐的FBSDK封装库),确保已完成库的安装:
    npm install @react-native-fbsdk-next/app @react-native-fbsdk-next/core
    

2. 适配FBSDK版本的API变更

FBSDK 14+版本已废弃FBSDKApplicationDelegate,替换为ApplicationDelegate,需修改导入和调用代码:

  • 替换原导入语句:
    #import <FBSDKCoreKit/FBSDKCoreKit-Swift.h>
    
  • 修改didFinishLaunchingWithOptions中的调用:
    [[ApplicationDelegate sharedInstance] application:application didFinishLaunchingWithOptions:launchOptions];
    
  • 修改openURL方法中的调用:
    BOOL handled = [[ApplicationDelegate sharedInstance] application:application
                                                            openURL:url
                                                  sourceApplication:options[UIApplicationOpenURLOptionsKeySourceApplication]
                                                         annotation:options[UIApplicationOpenURLOptionsKeyAnnotation]];
    

3. 检查Xcode项目配置

  • 打开Xcode项目,进入Build Settings,确认Header Search Paths包含FBSDK路径(若无则手动添加):
    $(inherited)
    "${PODS_ROOT}/FBSDKCoreKit/FBSDKCoreKit"
    
  • 若为Swift/OC混合项目,确保Objective-C Bridging Header配置正确,或直接使用FBSDKCoreKit-Swift.h完成导入。

4. 清理缓存并重新构建

  • 清理Xcode缓存:按下Cmd+Shift+K,再删除Derived Data(路径:Xcode -> Settings -> Locations -> Derived Data)。
  • 终端执行pod deintegrate && pod install,重启Xcode后重新构建项目。

5. 确认版本兼容性

确保react-native-fbsdk-next版本与FBSDK版本匹配,比如react-native-fbsdk-next v12+对应FBSDK 16+,可查看库的官方文档确认版本对应关系。


修改后的AppDelegate.mm示例(适配FBSDK 14+版本):

#import "AppDelegate.h"

#import <React/RCTBundleURLProvider.h>
#import <React/RCTLinkingManager.h>
#import <FBSDKCoreKit/FBSDKCoreKit-Swift.h>

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
  self.moduleName = @"main";
  self.initialProps = @{};

  [[ApplicationDelegate sharedInstance] application:application didFinishLaunchingWithOptions:launchOptions];

  return [super application:application didFinishLaunchingWithOptions:launchOptions];
}

- (NSURL *)sourceURLForBridge:(RCTBridge *)bridge
{
  return [self getBundleURL];
}

- (NSURL *)getBundleURL
{
#if DEBUG
  return [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@".expo/.virtual-metro-entry"];
#else
  return [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"];
#endif
}

// Linking API
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options {
  BOOL handled = [[ApplicationDelegate sharedInstance] application:application
                                                                openURL:url
                                                      sourceApplication:options[UIApplicationOpenURLOptionsKeySourceApplication]
                                                             annotation:options[UIApplicationOpenURLOptionsKeyAnnotation]];

  return handled || [super application:application openURL:url options:options] || [RCTLinkingManager application:application openURL:url options:options];
}

// Universal Links
- (BOOL)application:(UIApplication *)application continueUserActivity:(nonnull NSUserActivity *)userActivity restorationHandler:(nonnull void (^)(NSArray<id<UIUserActivityRestoring>> * _Nullable))restorationHandler {
  BOOL result = [RCTLinkingManager application:application continueUserActivity:userActivity restorationHandler:restorationHandler];
  return [super application:application continueUserActivity:userActivity restorationHandler:restorationHandler] || result;
}

// Explicitly define remote notification delegates to ensure compatibility with some third-party libraries
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
{
  return [super application:application didRegisterForRemoteNotificationsWithDeviceToken:deviceToken];
}

// Explicitly define remote notification delegates to ensure compatibility with some third-party libraries
- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error
{
  return [super application:application didFailToRegisterForRemoteNotificationsWithError:error];
}

// Explicitly define remote notification delegates to ensure compatibility with some third-party libraries
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
{
  return [super application:application didReceiveRemoteNotification:userInfo fetchCompletionHandler:completionHandler];
}

@end

内容的提问来源于stack exchange,提问作者Ericka Yusi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 16:15:06