【问题标题】:Phonegap build - Facebook connect plugin - Invalid android_key parameter errorPhonegap 构建 - Facebook 连接插件 - 无效的 android_key 参数错误
【发布时间】:2014-03-22 10:12:00
【问题描述】:

我正在通过 phonegap build 运行示例代码(见下文)以生成一个 android apk。

https://github.com/phonegap-build/FacebookConnect/blob/master/example/Simple/index.html

当我尝试通过 Android 设备上的应用程序(安装了 facebook 应用程序)登录 facebook 时,我收到此错误:

无效的 android_key 参数 J4INwYsuTyQ_LJc1d3WZ2HReg7M 不匹配任何允许的 android 密钥。在http://developers.facebook.com/apps/'app id' 处配置您的应用密钥哈希

我已将此密钥复制粘贴到我的应用程序的 android 设置的密钥哈希部分,但当我尝试使用该应用程序登录时它仍然抛出相同的错误。

如何让这个应用成功登录facebook?

或者:还有什么方法可以让安卓应用使用 phonegap 登录 facebook?

以下是我做过的一些事情:

  • 在我的 Facebook 应用设置中:

    • 将“包名称”设置为在我的 phonegap config.xml 中找到的“小部件 ID”。
    • 将“类名”设置为包名并附加“.ProjectActivity”。
    • 启用“单点登录”并禁用“深度链接”。
    • 向公众开放应用程序(通过“状态和审查”部分。
  • 在我的 phonegap config.xml 中(在 phonegap 项目的 /www 目录中找到):

    • 输入 APP_ID 作为在我的 facebook 应用仪表板中找到的 ID
    • 在我的 Facebook 应用设置中输入 APP_NAME 作为“命名空间”
  • 在我的 phonegap 构建应用设置中:

【问题讨论】:

    标签: android facebook cordova phonegap-plugins phonegap-build


    【解决方案1】:

    我认为您应该使用 facebook phonegap 插件作为您的身份验证。

    下载并安装到您的 cordova 项目中。

    https://github.com/phonegap/phonegap-facebook-plugin

    使用此命令进行安装。

    cordova plugin add https://github.com/phonegap/phonegap-facebook-plugin.git --variable APP_ID="xxxxxxxxxxxxx" --variable APP_NAME=“xxxxxxxx”
    

    然后在此处设置您的 Facebook 应用程序:

    http://developers.facebook.com/apps/

    然后确保你的项目中有这个脚本。

    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() 登录。尽情享受吧!

    【讨论】:

    • 您建议使用的代码似乎与插件 github 页面上的示例非常相似,除了缺少一些内容,这将使其像对 cordova.js 文件的引用和带有 class="data" 的 div。
    【解决方案2】:

    我通过使用 phonegap-facebook-plugin 并在本地构建我的 cordova/phonegap 项目成功地制作了一个可以登录 facebook 的应用程序。

    我创建了一个新的 cordova 项目并为该项目添加了 android 平台,按照此处的说明进行操作:http://docs.phonegap.com/en/3.4.0/guide_overview_index.md.html#Overview

    在执行此操作时,我发现我无意中使用了较旧的 cordova 版本 (3.1) 制作了我以前的项目,并且我没有安装 cordova 命令行界面。我制作第一个项目的方式可能还有其他问题。

    然后我添加了在此处找到的 phonegap-facebook-plugin:https://github.com/phonegap/phonegap-facebook-plugin 使用此命令(来自我的项目位置):

        cordova plugin add https://github.com/phonegap/phonegap-facebook-plugin.git --variable       APP_ID="xxxxxxxxxxxxx" --variable APP_NAME=“xxxxxxxx”
    

    (将 APP_ID 值替换为我的 facebook 应用程序 ID,将 APP_NAME 值替换为我的应用程序的命名空间)。

    然后,我将 index.html 替换为 phonegap-facebook-plugin github 页面 + /blob/master/example/Simple/index.html 中的示例索引文件(将 app_id 值替换为我的应用程序 ID)。

    然后我将应用程序直接运行到我的安卓设备上:

        cordova run android
    

    在这个应用程序中,我可以使用示例提供的界面登录、发布到我自己或朋友的墙等。使用这个新项目(更新了 cordova 版本)我可以使用 phonegap build但我还没试过。

    感谢 Dato' Mohammad Nurdin 提出使用此插件的建议。

    【讨论】:

    • 其实我用了同样的步骤,但我失败了,你能把eclipse项目分享给我吗
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-02
    • 1970-01-01
    • 2016-06-14
    • 2014-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多