Cordova:如何检测Facebook插件已加载?

时间:2014-03-22 13:39:34

标签: ios cordova phonegap-plugins cordova-plugins

我正在使用Cordova开发iOS应用程序,我使用Facebook连接插件进行身份验证。

我的问题:有时Facebook插件的加载时间不够早,因此FB身份验证不会采用本机方式,而是通过一种应用内浏览器弹出窗口。

有没有办法检测Fb插件已完成加载?

谢谢

2 个答案:

答案 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中进行调试比推着油轮困难。

希望以下调用方法有帮助,

  1. 将插件的引用添加到index.html
  2. onDeviceReady()函数之后,添加JavaScript以调用本机插件并处理插件结果。
  3. 添加名为callNativePluginnativePluginResultHandlerandnativePluginErrorHandler
  4. 的JavaScript函数

    如下图所示,

    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以获取更多信息。