FBSDK:无法读取未定义

时间:2017-09-18 08:27:54

标签: javascript ios react-native fbsdk

我正在使用FBSDK设置React Native项目以进行登录。

这是我到目前为止所做的事情:

  1. 我跑了npm install react-native-fbsdk --save
  2. 我跑了react-native link
  3. 我按照那里提到的每一步:https://developers.facebook.com/docs/facebook-login/ios/
  4. 我使用此视频进行了双重检查:https://www.youtube.com/watch?v=rAXVKapP5cM
  5. 但是,我仍然会收到此红屏错误:

    Cannot read property logInWithReadPermissions of undefined在FBLoginManager.js第77行(https://github.com/facebook/react-native-fbsdk/blob/master/js/FBLoginManager.js

    这是我的AppDelegate.m内容:

    #import "AppDelegate.h"
    #import <FBSDKCoreKit/FBSDKCoreKit.h>
    #import <React/RCTBundleURLProvider.h>
    #import <React/RCTRootView.h>
    
    @implementation AppDelegate
    
    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    {
      NSURL *jsCodeLocation;
    
      jsCodeLocation = [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index.ios" fallbackResource:nil];
    
      RCTRootView *rootView = [[RCTRootView alloc] initWithBundleURL:jsCodeLocation
                                                          moduleName:@"PegaseBuzzApp"
                                                   initialProperties:nil
                                                       launchOptions:launchOptions];
      rootView.backgroundColor = [[UIColor alloc] initWithRed:1.0f green:1.0f blue:1.0f alpha:1];
    
      [[FBSDKApplicationDelegate sharedInstance] application:application
                               didFinishLaunchingWithOptions:launchOptions];
    
    
      self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
      UIViewController *rootViewController = [UIViewController new];
      rootViewController.view = rootView;
      self.window.rootViewController = rootViewController;
      [self.window makeKeyAndVisible];
      return YES;
    }
    
    - (void)applicationDidBecomeActive:(UIApplication *)application {
      [FBSDKAppEvents activateApp];
    }
    
    
    - (BOOL)application:(UIApplication *)application
                openURL:(NSURL *)url
      sourceApplication:(NSString *)sourceApplication
             annotation:(id)annotation {
      return [[FBSDKApplicationDelegate sharedInstance] application:application
                                                            openURL:url
                                                  sourceApplication:sourceApplication
                                                         annotation:annotation];
    }
    @end
    

    这是我的链接框架和二进制文件:

    enter image description here

    编辑:关于我的项目:

    const FBSDK = require('react-native-fbsdk');
    const {
      LoginManager,
    } = FBSDK;
    

    加:

    _onFBButtonPress () {
        LoginManager.logInWithReadPermissions(['public_profile']).then(
          function(result) {
            if (result.isCancelled) {
              alert('Login cancelled');
            } else {
              alert('Login success with permissions: '
                +result.grantedPermissions.toString());
            }
          },
          function(error) {
            alert('Login fail with error: ' + error);
          }
        );
      }
    

    <Button onPress={() => this._onFBButtonPress()} buttonStyle={'buttonFb'} labelStyle={'buttonFbText'} label={I18n.t('Login.btnConnectFB')}></Button>
    

    我想念什么?

5 个答案:

答案 0 :(得分:4)

我刚刚解决了同样的错误。 由于某些原因    &#34; react-native link react-native-fbsdk&#34; 已经完成了Android但不是ios。

rnpm-install info Android模块react-native-fbsdk已经链接 rnpm-install info链接react-native-fbsdk ios依赖项 rnpm-install info iOS模块react-native-fbsdk已成功链接

尝试重新运行并确保您正在进行链接    libRCTFBSDK.a

答案 1 :(得分:3)

按照@Greg Cockroft的回答,我注意到我无法在我的项目“Link Binary With Libraries”中包含“libRCTFBSDK.a”,因为我没有包含“RCTFBSDK”库项目。

因此,如果您处于相同情况,请执行以下缺少的步骤:

  1. 在您的Xcode项目“Libraries”组下添加(或使用Finder拖动)“/node_modules/react-native-fbsdk/ios/RCTFBSDK.xcodeproj”。
  2. 构建“RCTFBSDK.xcodeproj”或整个项目。
  3. 在项目设置中的“Link Binary With Libraries”下添加“libRCTFBSDK.a”。
  4. 编译/运行您的应用。现在,如果您拥有正确的JS登录代码,您应该可以通过Facebook的屏幕登录。

答案 2 :(得分:1)

使用功能LoginManager。 logInWithPermissions ([['public_profile','email']);

答案 3 :(得分:0)

一旦您这样做:

npm install react-native-fbsdk --save
react-native link

将最新的FacebookSDK下载到您的〜/ Documents文件夹中。

将其解压缩到〜/ Documents / FacebookSDK /

然后在XCode中重建。

为我工作。

答案 4 :(得分:0)

通过添加到metro.config.js解决。并确保您已经安装了metro-config

const blacklist = require('metro-config/src/defaults/blacklist');

module.exports = {
    resolver: {
        blacklistRE: blacklist([
            /node_modules\/.*\/node_modules\/react-native\/.*/,
        ])
    },
};