私のAndroidアプリケーションでは、Facebookログインを使用しました。これは初めて使用しました。
ログイン機能はリリースapkファイルで正常に動作しています。また、keytool、opensslを使用してキーハッシュを生成しました:-
keytool -exportcert -alias "MyAppAlias" -keystore "Path to keystore" |
openssl sha1 -binary | openssl base64
生成されたキーハッシュをFacebook開発者アカウントのアプリ設定に追加しました。署名付きapkを生成しているとき、Facebookログインは正常に機能していますが、Playストアで同じapkを公開した後、Facebookログインは機能せず、クラッシュすることなく、呼び出された場所からのアクティビティ(マイアプリのログインアクティビティ)にリダイレクトされます。メッセージに応答していません。
ありがとう。
最後に、私は問題を解決しました。
この問題の背後にある理由アプリをPlayストアに公開しているときに、GooglePlayからAPPSIGNINGを実行したため、そこで新しいSHA-1キーが作成されました。
このキーを表示するには、Google Playコンソールに移動し、アプリを選択してからリリース管理->アプリ署名
このページの「アプリ署名証明書」セクションで新しいSHA-1キーを取得しました
つまり、ポイントは、上の画像に示すように、GooglePlay署名が新しい証明書を作成することです。
Facebook開発者アカウントで、キーストアによって生成されたキーハッシュを追加する必要があります。ただし、この場合、このAPPSIGNING証明書に対応するキーハッシュも追加する必要があります。ここで問題となるのは、この証明書/ SHA-1フィンガープリントのキーハッシュを取得する方法です。
Google Play APP SIGNINGのSHA-1キーからキーハッシュを作成するにはどうすればよいですか?
SHA-1キーからキーハッシュを生成するには、小さなJavaプログラム、
// GOOGLE PLAY APP SIGNING SHA-1 KEY:- 65:5D:66:A1:C9:31:85:AB:92:C6:A2:60:87:5B:1A:DA:45:6E:97:EA
byte[] sha1 = {
0x65, 0x5D, 0x66, (byte)0xA1, (byte)0xC9, 0x31, 0x85, (byte)0xAB, (byte)0x92, (byte)0xC6, (byte)0xA2, 0x60, 0x87, 0x5B, 0x1A, (byte)0xDA, 0x45, 0x6E, (byte)0x97, (byte)0xEA
};
System.out.println("keyhashGooglePlaySignIn:"+ Base64.encodeToString(sha1, Base64.NO_WRAP));
出力:-
keyhashGooglePlaySignIn: ZV1dkSgxvc2p4aCtFx9tcaQr8N4=
このキーハッシュをコピーして、アプリのFacebookDeveloperアカウント設定に貼り付けます。これが私の問題が解決された方法です。
コメントをくれたすべての開発者に感謝します。 :)
@vChampsの回答を少し改善しました。 SHA1文字列を以下の関数に渡すだけです
public void hashFromSHA1(String sha1) {
String[] arr = sha1.split(":");
byte[] byteArr = new byte[arr.length];
for (int i = 0; i< arr.length; i++) {
byteArr[i] = Integer.decode("0x" + arr[i]).byteValue();
}
Log.e("hash : ", Base64.encodeToString(byteArr, Base64.NO_WRAP));
}
echo SHA1_here | xxd -r -p | openssl base64
上記のコードと同じように機能します。
コピーここにSHA1キーを貼り付けて、すべての頭痛の種を減らします。 リンク 内部的に16進数をBase64に変換します。
Kotlinコード:
import Android.util.Base64
import Android.util.Log
fun hashFromSHA1(sha1: String) {
val arr = sha1.split(":".toRegex()).dropLastWhile { it.isEmpty() }.toTypedArray()
val byteArr = ByteArray(arr.size)
for (i in arr.indices) {
byteArr[i] = Integer.decode("0x" + arr[i])!!.toByte()
}
Log.e("hash : ", Base64.encodeToString(byteArr, Base64.NO_WRAP))
}