React Native Facebook 登录按钮在 iOS 模拟器中使应用程序崩溃

Posted

技术标签:

【中文标题】React Native Facebook 登录按钮在 iOS 模拟器中使应用程序崩溃【英文标题】:React Native Facebook login button crashes app in iOS Simulator 【发布时间】:2016-12-30 00:44:34 【问题描述】:

我正在尝试使用 FBSDK 在我的 React Native ios 应用程序中设置 Facebook 登录。该按钮呈现,但单击时应用程序在 iOS 模拟器中崩溃。它甚至不会在远程调试器中记录任何错误。

我在 xcode 中将 FBSDKCoreKit.framework 和 FBSDKLoginKit.framework 添加到我的项目中,并按照this guide 了解如何修改我的info.plistAppDelegate.m

我的按钮代码有问题吗?

import React,  Component  from 'react'
import  View  from 'react-native'
import FBSDK from 'react-native-fbsdk'
const  LoginButton  = FBSDK    

import styles from '../styles'    

export default class Login extends Component 
  constructor (props) 
    super(props)
    this.onLoginFinished = this.onLoginFinished.bind(this)
      

  onLoginFinished (error, result) 
    if (error) 
      console.log(error)
      alert("Login failed with error: " + error);
     else if (result.isCancelled) 
      alert("Login was cancelled");
     else 
      alert("Login was successful with permissions: " + result)
    
      

  render () 
    return (
      <View style=styles.container> 
        <LoginButton
          publishPermissions=["public_profile"]
          onLoginFinished=this.onLoginFinished
          onLogoutFinished=() => alert("User logged out")
        />
      </View>
    )
  

编辑

根据 Andreyco 的评论添加运行 react-native log-ios 的日志

 <Error>: *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Read permissions are not permitted to be requested with publish or manage permissions.'
  *** First throw call stack:
  (
    0   CoreFoundation                      0x00000001102ce34b __exceptionPreprocess + 171
    1   libobjc.A.dylib                     0x000000010f1dc21e objc_exception_throw + 48
    2   CoreFoundation                      0x00000001102ce299 -[NSException raise] + 9
    3   FunDates                            0x000000010e860c05 -[FBSDKLoginManager logInWithPublishPermissions:fromViewController:handler:] + 228
    4   FunDates                            0x000000010e85d523 -[FBSDKLoginButton _buttonPressed:] + 1662
    5   UIKit                               0x000000011284b5b8 -[UIApplication sendAction:to:from:forEvent:] + 83
    6   UIKit                               0x00000001129d0edd -[UIControl sendAction:to:forEvent:] + 67
    7   UIKit                               0x00000001129d11f6 -[UIControl _sendActionsForEvents:withEvent:] + 444
    8   UIKit                               0x00000001129d00f2 -[UIControl touchesEnded:withEvent:] + 668
    9   UIKit                               0x00000001128b8ce1 -[UIWindow _sendTouchesForEvent:] + 2747
    10  UIKit                               0x00000001128ba3cf -[UIWindow sendEvent:] + 4011
    11  UIKit                               0x000000011286763f -[UIApplication sendEvent:] + 371
    12  UIKit                               0x000000011305971d __dispatchPreprocessedEventFromEventQueue + 3248
    13  UIKit                               0x00000001130523c7 __handleEventQueue + 4879
    14  CoreFoundation                      0x0000000110273311 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 17
    15  CoreFoundation                      0x000000011025859c __CFRunLoopDoSources0 + 556
    16  CoreFoundation                      0x0000000110257a86 __CFRunLoopRun + 918
    17  CoreFoundation                      0x0000000110257494 CFRunLoopRunSpecific + 420
    18  GraphicsServices                    0x0000000116095a6f GSEventRunModal + 161
    19  UIKit                               0x0000000112849964 UIApplicationMain + 159
    20  FunDates                            0x000000010e69f9bf main + 111
    21  libdyld.dylib                       0x000000011421668d start + 1
    22  ???                                 0x0000000000000001 0x0 + 1
  )

【问题讨论】:

运行 react-native log-ios 以跟踪来自设备的日志。然后发布日志 @Andreyco 日志已添加 【参考方案1】:

我需要将publishPermissions 更改为readPermissions

<LoginButton
  readPermissions=["public_profile email"]
  onLoginFinished=this.loginFinished.bind(this)
  onLogoutFinished=() => alert("User logged out")
/>

【讨论】:

@plmok61 我遇到了同样的错误,但将public 更改为read 对我不起作用。自从这篇文章之后,您可能遇到过其他任何想法吗? 谢谢!! FB 文档并不关心这个小细节…… 别再看了——这就是你所需要的。 哇。我想知道文档中的这种疏忽是否有任何原因? Facebook 是否仍将此 SDK 视为首选路径? 您至少为我节省了几个小时!非常感谢!

以上是关于React Native Facebook 登录按钮在 iOS 模拟器中使应用程序崩溃的主要内容,如果未能解决你的问题,请参考以下文章

React-Native:Facebook 登录后返回应用程序?

如何在 React Native 中进行 Facebook 登录?

React Native Facebook 登录和分支 AppDelegate

在 React Native 组件中使用 Facebook 登录功能

Facebook在android的react-native应用程序中登录

React Native App 的 Facebook 登录实现失败