PhoneGap と Ionic を使用して、iOS で facebookConnectPlugin を動作させることができました。問題は、Android でまったく同じアプリを実行しようとすると、「facebookConnectPlugin が定義されていません」というエラーが表示されることです。私は 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) 指定したキーストアとエイリアス「androiddebugkey」をアップロードして、PhoneGap ビルドで Android キーを作成しました。証明書パスワードを含むすべてのパスワードについて、パスワード「android」を入力しました。
5) アプリケーションを PhoneGap ビルドにアップロードし、Android エミュレーター (Visual Studio Emulator for Android を使用する Lollipop) にインストールし、次のコードを使用して 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 の widget 要素の「id」と同じです。クラス名には、id とまったく同じものを指定しましたが、「.MainActivity」が追加されています。上記の手順 2 で生成されたキー ハッシュを [キー ハッシュ] フィールドに挿入しました。シングルサインオンをオンにしました。それが正しいかどうかはわかりません。
私はこれを理解するのに何日も費やしましたが、運がありませんでした。問題がハッシュ、コルドバ、またはその他の Facebook のアクセス許可にあるのかどうかはわかりません。前述のとおり、iOS では問題なく動作します。問題があるのはAndroidだけです。
どんな助けでも大歓迎です。