我能够使用 PhoneGap 和 Ionic 让 facebookConnectPlugin 在 iOS 上运行。问题是,当我尝试在 Android 上运行完全相同的应用程序时,我收到错误"facebookConnectPlugin is not defined"。我正在使用 PhoneGap Build 并且不是为 Android 原生构建的。
以下是我为使其在 Android 上运行而采取的步骤:
1) 生成一个新的密钥库。
"C:\Program Files (x86)\Java\jre1.8.0_60\bin\keytool.exe" -genkey -v -keystore debug.keystore -alias androiddebugkey -keyalg RSA -keysize 2048 -validity 10000
2) 使用此密钥库创建了一个新哈希。
"C:\Program Files (x86)\Java\jre1.8.0_60\bin\keytool.exe" -exportcert -alias androiddebugkey -keystore debug.keystore | openssl sha1 -binary | openssl base64
在它要求我输入密码(用于密钥库和哈希)的任何地方都使用密码“android”。
3) 在我的 config.xml 文档中添加了以下内容:
<gap:plugin name="com.phonegap.plugins.facebookconnect" version="0.9.0">
<param name="APP_ID" value="XXXXXXXXXX" />
<param name="APP_NAME" value="MyApp" />
</gap:plugin>
我从 Facebook 获得的 APP_ID 和 APP_NAME 是 Facebook 的显示名称。
4) 在 PhoneGap 构建中创建一个 Android 密钥,上传我指定的密钥库和别名“androiddebugkey”。对于所有密码,包括证书密码,我输入我的密码“android”。
5) 将我的应用程序上传到 PhoneGap 构建,将其安装在 Android 模拟器上(Lollipop 使用 Visual Studio Emulator for Android)并尝试使用以下代码登录 Facebook。此代码在 $ionicPlatform.ready 之后触发。
var _this = this;
var fbLoginSuccess = function (userData) {
facebookConnectPlugin.api("me/?fields=id,email", ["public_profile"],
function (result) {
},
function (error) {
alert("Failed: " + error);
}
);
}
facebookConnectPlugin.login(["public_profile"],
fbLoginSuccess,
function (error) {
alert(JSON.stringify(error));
}
);
6) 对于我在 developers.facebook.com 的网站,我添加了一个 Android 应用程序。Google Play 包名称与我在 config.xml 中的小部件元素中的“id”相同。对于类名,我指定了与 id 完全相同的内容,但附加了“.MainActivity”。我将上面第 2 步生成的 Key Hash 插入到 Key Hashes 字段中。我打开了单点登录。不确定这是否正确。
我花了几天时间试图解决这个问题,但没有运气。我不确定问题是否与哈希、cordova 或其他一些 Facebook 权限有关。就像我之前说的,它在 iOS 上运行良好。只是安卓有问题。
任何帮助将不胜感激。