我正在使用Cordova开发iOS应用程序,我使用Facebook连接插件进行身份验证。
我的问题:有时Facebook插件的加载时间不够早,因此FB身份验证不会采用本机方式,而是通过一种应用内浏览器弹出窗口。
有没有办法检测Fb插件已完成加载?
谢谢
答案 0 :(得分:0)
我认为您应该使用facebook phonegap插件作为身份验证。
下载并安装到您的cordova项目中。
https://github.com/phonegap/phonegap-facebook-plugin
然后确保您的项目中有此脚本。
cdv-plugin-fb-connect.js
facebook-js-sdk.js
之后,将此代码粘贴到主脚本
中if ((typeof cordova == 'undefined') && (typeof Cordova == 'undefined')) alert('Cordova variable does not exist. Check that you have included cordova.js correctly');
if (typeof CDV == 'undefined') alert('CDV variable does not exist. Check that you have included cdv-plugin-fb-connect.js correctly');
if (typeof FB == 'undefined') alert('FB variable does not exist. Check that you have included the Facebook JS SDK file.');
FB.Event.subscribe('auth.login', function(response) {
//alert('auth.login event');
});
FB.Event.subscribe('auth.logout', function(response) {
//alert('auth.logout event');
});
FB.Event.subscribe('auth.sessionChange', function(response) {
//alert('auth.sessionChange event');
});
FB.Event.subscribe('auth.statusChange', function(response) {
//alert('auth.statusChange event');
});
function getSession() {
alert("session: " + JSON.stringify(FB.getSession()));
}
function getLoginStatus() {
FB.getLoginStatus(function(response) {
if (response.status == 'connected') {
alert('logged in');
} else {
alert('not logged in');
}
});
}
var friendIDs = [];
var fdata;
function logout() {
FB.logout(function(response) {
alert('logged out');
window.location.replace("#login");
});
}
function login() {
FB.login(
function(response) {
if (response.authResponse) {
alert('logged in');
FB.api('/me', function(me) {
if (me.id) {
localStorage.id = me.id;
localStorage.email = me.email;
localStorage.name = me.name;
window.location.replace("#home");
}
else {
alert('No Internet Connection. Click OK to exit app');
navigator.app.exitApp();
}
});
} else {
alert('not logged in');
}
}, {
scope: "email"
});
}
document.addEventListener('deviceready', function() {
try {
//alert('Device is ready! Make sure you set your app_id below this alert.');
FB.init({
appId: "appid",
nativeInterface: CDV.FB,
useCachedDialogs: false
});
document.getElementById('data').innerHTML = "";
} catch (e) {
alert(e);
}
}, false);
使用login()
登录。享受!!
答案 1 :(得分:0)
如果插件在测试应用程序时无法加载,则日志中必须有一个条目。
另外看起来你正在使用facebook API,在here.
中提供的推荐插件之后总是加载其他原生插件的phonegap它也按照您在XML文件中提到的顺序加载
<feature name="org.apache.cordova.facebook.Connect">
<param name="ios-package" value="FacebookConnectPlugin" />
</feature>
和
<plugin name="" value="" />
由于开发人员清楚地知道在Phonegap中进行调试比推着油轮困难。
希望以下调用方法有帮助,
index.html
onDeviceReady()
函数之后,添加JavaScript以调用本机插件并处理插件结果。callNativePlugin
,nativePluginResultHandler
,andnativePluginErrorHandler
如下图所示,
function callYourPlugin( returnSuccess ) {
YourPlugin.callNativeFunction( YourPluginResultHandler, YourPluginErrorHandler, returnSuccess );
}
function YourPluginResultHandler (result) {
alert("SUCCESS: \r\n"+result );
}
function YourPluginErrorHandler (error) {
alert("ERROR: \r\n"+error );
}
最后添加按钮来调用你的插件,如下所示,
<body onload="onBodyLoad()">
<h1>Hey, it's Cordova!</h1>
<button onclick="callYourPlugin('success');">Click to invoke the Native Plugin with an SUCCESS!</button>
<button onclick="callYourPlugin('error');">Click to invoke the Native Plugin with an ERROR!</button>
</body>
我认为这种方法很容易调用任何插件,您也可以查看此article以获取更多信息。