[Android] Facebook 認証できないエラー : com.facebook.FacebookOperationCanceledException: remote_app_id does not match stored id

Android アプリ開発で、Facebook 認証できないというエラーが発生しました。

com.facebook.FacebookOperationCanceledException: remote_app_id does not match stored id

Facebook アプリの設定画面に登録している Key Hashes が間違っている場合、このようなエラーが発生するようです。

下記のコードを onCreate に記載して、key hash をログに出力して確認します。

try {
    PackageInfo info = getPackageManager().getPackageInfo("com.example.packagename",
            PackageManager.GET_SIGNATURES);
    for (Signature signature : info.signatures) {
        MessageDigest md = MessageDigest.getInstance("SHA");
        md.update(signature.toByteArray());
        Log.d("YOURHASH KEY:",
                Base64.encodeToString(md.digest(), Base64.DEFAULT));
    }
} catch (NameNotFoundException e) {
 
} catch (NoSuchAlgorithmException e) {
 
}

key hash をコマンドラインで確認する方法もありますが、Windows用の OpenSSL を使わないといけないらしく、Mac用の OpenSSL だと正しい key hash が取得できないみたいです。

例えば、コマンドラインで keytool を使って debug.keystore の key hash を確認すると、 bvfSSDnrryuK8cbfekyHTs59l/A= です。

keytool -exportcert -alias androiddebugkey -keystore debug.keystore | openssl sha1 -binary | openssl base64
キーストアのパスワードを入力してください:  android
bvfSSDnrryuK8cbfekyHTs59l/A=

しかし、冒頭の方法で、アプリ実行時のログから key hash を出力させると dkgthMwGADFQ7/9fkMn4MUzpSWo= であり、こちらが正しい値です。

ややこしい話ですが、解決方法が分かって良かったです。

参考情報