ios - cordova-plugin-facebook4 Facebook 登录未在 iOS 上打开
问题描述
我对iOS设备上的 cordova-plugin-facebook4 ( https://github.com/jeduan/cordova-plugin-facebook4 )有疑问。按照文档(“iOS 指南”)中指示的安装过程并在 Facebook 开发人员控制台中正确配置应用程序后,当我单击我的 Facebook 登录按钮时,没有任何反应。XCODE 控制台输出以下错误:
2019-02-15 17:22:58.678937+0100 HelloCordovaApp[59179:1228209] Logging in with CORDOVA ... 2019-02-15 17:22:58.692742+0100 HelloCordovaApp[59179:1228209] Checking login status: unknown 2019-02-15 17:22:58.692947+0100 HelloCordovaApp[59179:1228209] Performing Fb login ... 2019-02-15 17:22:58.693087+0100 HelloCordovaApp[59179:1228209] Starting login 2019-02-15 17:22:58.693271+0100 HelloCordovaApp[59179:1228209] *** WebKit discarded an uncaught exception in the webView:decidePolicyForNavigationAction:request:frame:decisionListener: delegate: <NSInvalidArgumentException> Permissions should each be specified in separate string values in the array. 2019-02-15 17:22:58.694627+0100 HelloCordovaApp[59179:1228209] Client application failed to make a policy decision via WebPolicyDecisionListener, using defaultPolicy 2
我开发的应用程序是用 AngularJs 编写的,它是使用 Cordova 包装的。会是什么呢?在Android设备上它可以完美运行......这是用户点击我的 Facebook 登录按钮时执行的代码:
function fbLoginButtonClick(){
console.log('Logging in with CORDOVA ...');
facebookConnectPlugin.getLoginStatus(_fbLoginStatusSuccess, _fbLoginStatusError);
}
////////
function _fbLoginStatusSuccess(response) {
var responseStatus = response.status;
console.log('Checking login status: ', responseStatus);
if (responseStatus === 'connected') {
_fbLoginSuccess();
} else if (responseStatus !== null) {
_doFbLogin();
} else {
handleFacebookError(responseStatus);
}
}
function _fbLoginStatusError(error) {
handleFacebookError(error);
}
function _doFbLogin() {
console.log('Performing Fb login ...');
facebookConnectPlugin.login(['email, public_profile'], _fbLoginSuccess, _fbLoginError);
}
function _fbLoginSuccess(result) {
console.log('Fb API: getting user data ...');
facebookConnectPlugin.api('/me?fields=id,name,first_name,last_name,email', ['email', 'public_profile'], _fbApiSuccess, _fbApiError);
}
function _fbLoginError(error) {
handleFacebookError(error);
}
function _fbApiSuccess(userData) {
alert('User Authenticated!!');
//redirect to admin page
}
function _fbApiError(error) {
handleFacebookError(error);
}
function handleFacebookError (error) {
if(error){
console.log(error);
}
}
这是我的 config.xml 文件中的配置:
<plugin name="cordova-plugin-facebook4" spec="4.2.1">
<variable name="APP_ID" value="************" />
<variable name="APP_NAME" value="HelloCordovaApp" />
<variable name="FACEBOOK_HYBRID_APP_EVENTS" value="false" />
<variable name="FACEBOOK_ANDROID_SDK_VERSION" value="4.40.0" />
</plugin>
解决方案
我花了一段时间才弄清楚这一点,基本上错误是您传递给 SDK 的权限类型错误。以下是解决此问题的方法:
替换这一行:
facebookConnectPlugin.login(['email, public_profile'], _fbLoginSuccess, _fbLoginError);
和:
var perms = new Array("email","public_profile");
facebookConnectPlugin.login(perms, _fbLoginSuccess, _fbLoginError);
这应该可以为您解决问题。祝你好运!
推荐阅读
- r - 如何从具有 3 列的数据框在 R 中创建数组?
- react-native - 有没有办法将 React-Native 与 Hyperstack 和 Ruby 一起使用?
- node.js - 根据pdf文件中的字体名称解码文本
- ruby-on-rails-6 - 如何使用 Rails 6.0 使用 IMGkit 渲染图像?
- matlab - 批处理并将图像命名/保存在单独的文件夹中
- git - 将项目添加到 Git 后 Eclipse/STS Tools 项目资源管理器字体非常小
- c++ - '<' 无法解决类模板中的函数重载和参数不匹配问题,Visual Studio 编译器
- spring-boot - Gradle BOM 项目
- c# - 如何在 COM 事件源和处理程序中指定“事件类型”?
- python - 闰年while循环