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.plist
和AppDelegate.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 登录功能