アプリにFacebookのログイン機能をつけるとき、Facebook SDKでのログインがうまくできない時の対応方法です。
状況:
1.ターミナルより、以下のコマンドでHash keyを取得して、FB developerサイト->設定画面にkeyを登録している
keytool -exportcert -alias androiddebugkey -keystore "debug.keystoreまでのパス" | openssl sha1 -binary | openssl base64
※"debug.keystoreまでのパス"には、例えば以下のような値が入ります
~/.android/debug.keystore
2.アプリでのログイン時に以下の症状のいずれかがでる
* ログインボタンを押した後にパーミッションを求められ、OKをしたのに元の画面に戻る
- 以下のようなメッセージがログにでる
'com.facebook.orca.protocol.base.ApiException: remote_app_id does not match stored'
'..App is Misconfigured for facebook login...''.
3.アプリがパブリックに公開されていることを確認している
FB developer -> Status & Reviewから”Do you want to make this app and all its live features available to the general public?”がYESになっていることを確認する。
アプリがパブリックに公開されていない場合:
Contact Emailを設定することで、public公開が有効になります
SettingsでContact Emailを設定
App detailsでUser Support Emailを設定
対策:
アプリケーションのハッシュキーはFB developerに登録する必要がありますが、ターミナルからハッシュキーを取得すると、うまく取得できないケースがあるようです。
ですので、アプリケーションから直接hash keyを取得します。
- LoginするときのアクティビティのonCreate()に以下を追加します。
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
try {
PackageInfo info = getPackageManager().getPackageInfo(
"com.facebook.samples.loginhowto",
PackageManager.GET_SIGNATURES);
for (Signature signature : info.signatures) {
MessageDigest md = MessageDigest.getInstance("SHA");
md.update(signature.toByteArray());
Log.d("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT));
}
} catch (NameNotFoundException e) {
} catch (NoSuchAlgorithmException e) {
}
//その他の処理
}
- ログに"KeyHash: XXXXXXXXXXX"が表示されるので、その値をFB developerサイトのキーハッシュに登録します。
参考:
Facebook developerのトラブルシューティングにも記載があります。
http://stackoverflow.com/questions/5306009/facebook-android-generate-key-hash
https://developers.facebook.com/docs/android/getting-started/