Saya mencoba mengintegrasikan Masuk dengan Google ke dalam aplikasi saya. Saya tidak memiliki server back-end, saya hanya mendapatkan detail akun Google yang masuk ke aplikasi saya.
Saya pertama kali mencobanya dengan menggunakan Contoh Masuk Google tetapi saya mendapat kesalahan (Tidak ada perubahan kode yang dilakukan kecuali untuk mencetak stacktrace di bawah). Saya baru saja menggunakan contoh SignInActivity karena saya tidak memiliki server back-end.
Exception com.google.android.gms.common.api.ApiException: 12500:
at com.google.android.gms.common.internal.zzb.zzz(Unknown Source)
at com.google.android.gms.auth.api.signin.GoogleSignIn.getSignedInAccountFromIntent(Unknown Source)
at com.ewise.android.api.MainActivity.onActivityResult(SignInActivity.java:89) at android.app.Activity.dispatchActivityResult(Activity.java:7010)
at android.app.ActivityThread.deliverResults(ActivityThread.java:4187)
at android.app.ActivityThread.handleSendResult(ActivityThread.java:4234)
at android.app.ActivityThread.-wrap20(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1584)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6316)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:872)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:762)
Kode
public class SignInActivity extends AppCompatActivity implements
View.OnClickListener {
private static final String TAG = "SignInActivity";
private static final int RC_SIGN_IN = 9001;
private GoogleSignInClient mGoogleSignInClient;
private TextView mStatusTextView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Views
mStatusTextView = findViewById(R.id.status);
// Button listeners
findViewById(R.id.sign_in_button).setOnClickListener(this);
findViewById(R.id.sign_out_button).setOnClickListener(this);
findViewById(R.id.disconnect_button).setOnClickListener(this);
// [START configure_signin]
// Configure sign-in to request the user's ID, email address, and basic
// profile. ID and basic profile are included in DEFAULT_SIGN_IN.
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestEmail()
.build();
// [END configure_signin]
// [START build_client]
// Build a GoogleSignInClient with the options specified by gso.
mGoogleSignInClient = GoogleSignIn.getClient(this, gso);
// [END build_client]
// [START customize_button]
// Set the dimensions of the sign-in button.
SignInButton signInButton = findViewById(R.id.sign_in_button);
signInButton.setSize(SignInButton.SIZE_STANDARD);
signInButton.setColorScheme(SignInButton.COLOR_LIGHT);
// [END customize_button]
}
@Override
public void onStart() {
super.onStart();
// [START on_start_sign_in]
// Check for existing Google Sign In account, if the user is already signed in
// the GoogleSignInAccount will be non-null.
GoogleSignInAccount account = GoogleSignIn.getLastSignedInAccount(this);
updateUI(account);
// [END on_start_sign_in]
}
// [START onActivityResult]
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
// Result returned from launching the Intent from GoogleSignInClient.getSignInIntent(...);
if (requestCode == RC_SIGN_IN) {
// The Task returned from this call is always completed, no need to attach
// a listener.
Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data);
handleSignInResult(task);
}
}
// [END onActivityResult]
// [START handleSignInResult]
private void handleSignInResult(Task<GoogleSignInAccount> completedTask) {
try {
GoogleSignInAccount account = completedTask.getResult(ApiException.class);
// Signed in successfully, show authenticated UI.
updateUI(account);
} catch (ApiException e) {
// The ApiException status code indicates the detailed failure reason.
// Please refer to the GoogleSignInStatusCodes class reference for more information.
Log.w(TAG, "signInResult:failed code=" + e.getStatusCode());
e.printStackTrace();
updateUI(null);
}
}
// [END handleSignInResult]
// [START signIn]
private void signIn() {
Intent signInIntent = mGoogleSignInClient.getSignInIntent();
startActivityForResult(signInIntent, RC_SIGN_IN);
}
// [END signIn]
// [START signOut]
private void signOut() {
mGoogleSignInClient.signOut()
.addOnCompleteListener(this, new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
// [START_EXCLUDE]
updateUI(null);
// [END_EXCLUDE]
}
});
}
// [END signOut]
// [START revokeAccess]
private void revokeAccess() {
mGoogleSignInClient.revokeAccess()
.addOnCompleteListener(this, new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
// [START_EXCLUDE]
updateUI(null);
// [END_EXCLUDE]
}
});
}
// [END revokeAccess]
private void updateUI(@Nullable GoogleSignInAccount account) {
if (account != null) {
mStatusTextView.setText(getString(R.string.signed_in_fmt, account.getDisplayName()));
findViewById(R.id.sign_in_button).setVisibility(View.GONE);
findViewById(R.id.sign_out_and_disconnect).setVisibility(View.VISIBLE);
} else {
mStatusTextView.setText(R.string.signed_out);
findViewById(R.id.sign_in_button).setVisibility(View.VISIBLE);
findViewById(R.id.sign_out_and_disconnect).setVisibility(View.GONE);
}
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.sign_in_button:
signIn();
break;
case R.id.sign_out_button:
signOut();
break;
case R.id.disconnect_button:
revokeAccess();
break;
}
}
}
Dari yang saya baca, masalahnya bisa jadi disebabkan oleh SHA1 Generation .
Saya mengikuti panduan lengkap tetapi ternyata itu tidak berfungsi.
Saya menyalin SHA1 dari gradle signReport
Variant: debug
Config: debug
Store: /Users/user/.android/debug.keystore
Alias: AndroidDebugKey
MD5: A3:16:3F:43:75:FE:07:62:6D:8D:CC:DD:21:9F:FA:1A
SHA1: 7B:21:26:7F:D8:18:BB:0E:36:1C:82:DD:B7:28:5F:C1:2F:5C:E4:EA
Valid until: Saturday, August 31, 2047
----------
Variant: release
Config: none
----------
Variant: debugAndroidTest
Config: debug
Store: /Users/user/.android/debug.keystore
Alias: AndroidDebugKey
MD5: A3:16:3F:43:75:FE:07:62:6D:8D:CC:DD:21:9F:FA:1A
SHA1: 7B:21:26:7F:D8:18:BB:0E:36:1C:82:DD:B7:28:5F:C1:2F:5C:E4:EA
Valid until: Saturday, August 31, 2047
----------
Variant: debugUnitTest
Config: debug
Store: /Users/user/.android/debug.keystore
Alias: AndroidDebugKey
MD5: A3:16:3F:43:75:FE:07:62:6D:8D:CC:DD:21:9F:FA:1A
SHA1: 7B:21:26:7F:D8:18:BB:0E:36:1C:82:DD:B7:28:5F:C1:2F:5C:E4:EA
Valid until: Saturday, August 31, 2047
apa kemungkinan penyebabnya?
Terima kasih
PS Mungkinkah ini penyebabnya?
Google Play services out of date. Requires 11720000 but found 10932470
android
google-signin
Aaron
sumber
sumber
Jawaban:
Cukup perbarui Layanan Google Play Anda ke versi terbaru (atau 11720000 dalam kasus ini). Jika Anda menggunakan gambar AVD, Nexus 5 dan 5X mendukung Google Play. Setelah emulator aktif dan berjalan, buka Menu Extended Controls> Google Play lalu perbarui.
sumber
Kesalahan PlatformException (sign_in_failed, com.google.android.gms.common.api.ApiException: 12500:, null)
sumber
Periksa apakah sidik jari SHA-1 ditambahkan ke setelan proyek firebase. Jika tidak, temukan sidik jari SHA-1 menggunakan
https://developers.google.com/android/guides/client-auth
Juga, temukan sidik jari SHA-1 dari kunci pelepas menggunakan
Hapus
<keystore path>
dengan jalur penyimpanan kunci.Kemudian tambahkan kedua sidik jari SHA-1 ke setelan project firebase.
NB: Jangan lupa ganti google-services.json dengan google-services.json yang sudah diupdate dengan sidik jari baru. Saya kehilangan dua hari karena itu.
Saat debug
Android studio secara otomatis membuat
~/.android/debug.keystore
pada debug build pertama dan menggunakannya untuk menandatangani aplikasi.Untuk menjalankan SHA-1 (sandi
android
) ( doc ):Ini
SHA-1
harus ditambahkan ke setelan aplikasi difirebase
untuk memungkinkan penggunaan kemampuan masuk Google saat menguji build debug.sumber
untuk error 12500 Anda perlu menambahkan dukungan gmail di pengaturan firebase saja dan untuk error 10 tambahkan sidik jari ssh di konsol firebase seperti yang Anda lihat pada gambar
sumber
Email dukungan dan juga semua tautan proyek dan privasi diperlukan agar Masuk dengan Google berfungsi, jika tidak maka akan membuang 12500.
Setel di https://console.developers.google.com/apis/credentials di bagian bawah tab kedua bernama "layar persetujuan OAuth" - di sana Anda akan menemukan tiga tautan yang perlu dikonfigurasi.
Ini tidak disebutkan DI MANA SAJA di panduan Firebase.
sumber
Coba perbarui layar persetujuan OAuth di https://console.developers.google.com/apis/credentials
sumber
Saya terjebak dalam hal ini untuk sementara waktu.
Pastikan langkah ini dilakukan-
sumber
Sepertinya SHA1 Anda ditimpa oleh Google Play Store. Periksa di toko bermain Google Anda, panel peluncuran, di bawah penandatanganan aplikasi, lihat apakah google play memiliki SHA1 tambahan ditambahkan.
Dan salin SHA1 itu, tambahkan ke tempat Anda yang relevan, akan melakukan pekerjaan itu.
sumber
Jika masih ada orang di luar sana dengan masalah serupa, jika Anda menambahkan cakupan khusus, pastikan itu adalah cakupan yang valid. Dalam kasus saya, saya mencampur cakupan Facebook dengan cakupan Google dan membutuhkan waktu beberapa saat untuk mengetahuinya!
sumber
Saya menggunakan Firebase Authentication. SHA-1 saya ditunjukkan dengan benar, id klien juga benar tetapi saya masih mendapatkan 12500.
Ternyata masalah saya adalah saya tidak menunjukkan email Dukungan di pengaturan proyek saya. (Pengaturan -> tab Umum -> Proyek Anda (Pengaturan publik)).
sumber
Buka proyek Anda di Firebase console, buka Setelan Proyek, tambahkan sidik jari sertifikat SHA Anda di sana. Unduh file google-services.json yang diperbarui dan tambahkan ke folder aplikasi Proyek Anda.
Ini berhasil untuk saya.
sumber
Saya pikir kesalahan itu berasal dari SHA1 yang salah. Harap jangan lupa bahwa SHA1 berbeda antara mode rilis dan debug di studio android. Alih-alih menggunakan keytool untuk mendapatkan SHA1, Anda dapat menggunakan proyek Gradle -> Task -> android -> signReport di android studio (dapat membukanya dengan menu View -> Toolwindow -> gradle) untuk mendapatkan rilis dan debug SHA1. Setelah itu, agar mudah bekerja, Anda perlu membuat 2 kredensial terpisah dengan dua SHA1 di konsol Google cloud (google hanya menginstruksikan untuk membuat 1 menggunakan rilis SHA1, ketika kami mengembangkannya tidak akan berfungsi karena menggunakan debug SHA1).
sumber
Pertama, pastikan Anda mendaftarkan aplikasi Anda di konsol pengembang google
Pastikan Anda memiliki kunci
debug
danrelease
di aplikasi Firebase. Jika kesalahan ini muncul dalam produksi, tambahkan AndaSHA-1 release key
ke aplikasi basis api. Jika muncul dalam pengembangan, maka tambahkanSHA-1 debug key
.Mendapatkan kunci debug / rilis:
Pastikan untuk mengunduh pembaruan
google-services.json
ke aplikasi Anda.sumber
Bagi saya, masalahnya adalah menggunakan ClientID 'rilis' dengan aplikasi saya yang dikonfigurasi debug. Pastikan Anda memiliki rilis dan kunci debug, menggunakan masing-masing SHA-1.
sumber
Jika Anda datang ke sini dari flutter : Ini adalah salah satu kasus sudut yang harus kami perbaiki sesuai dengan dokumentasi di sini: https://pub.dev/packages/google_sign_in
sumber
Saat aplikasi Anda mengautentikasi dengan server backend atau mengakses Google API dari server backend, Anda harus meneruskan ID klien OAuth 2.0 yang dibuat untuk server Anda ke metode requestIdToken saat Anda membuat objek GoogleSignInOptions, untuk mengakses informasi profil dasar pengguna . Selain itu, jangan lupa untuk mengirimkan email dukungan di layar persetujuan OAuth yang ada di halaman Kredensial di Konsol API.
sumber
Bisa juga terjadi bahwa compiler cordova tidak dapat menemukan file keystore yang tepat.
Solusi: Sebelum menjalankan
ionic cordova build android
tentukan properti penandatangananLangkah-1 : Buat file keystore debug
Jalankan perintahnya
Gunakan kata sandi:
android
Langkah-2: Salin file keystore (
debug.keystore
) dari~/.android
keplatform/android
direktori proyek Anda saat iniLangkah-3: Buat file bernama release-signing.properties di
platform/android
direktoriLangkah-4: Tambahkan konten di file
Langkah-5: Sekarang buat
ionic cordova build android
sumber
Saya mengalami masalah yang sama setelah membuka proyek saya di komputer lain (Android Studio berbeda). Dalam kasus saya, saya menyelesaikannya menggunakan Asisten Firebase, yang telah saya gunakan untuk menyiapkan Firebase pada awalnya. Membuka Firebase Assistant (Tools> Firebase) dan memilih Authentication> Connect. Ini menghubungkan kembali proyek ke Firebase dan memperbarui konfigurasi
sumber
Saya terjebak dalam masalah Google Login sejak 2 minggu, akhirnya diurutkan dengan baik. Biar saya jelaskan alasannya. Masalahnya terkait dengan firebase. Di firebase, mereka menyebutkan bidang "email dukungan" sebagai opsional. Tetapi begitu saya menambahkannya (salah satu email pribadi Anda), masalah disortir dan saya mendapat tanggapan. Jika Anda mendapatkan kesalahan sebagai 12501, maka itu terkait dengan pengaturan di akun google Anda.
sumber
Saya terjebak dalam hal ini untuk sementara waktu.
Pastikan langkah ini dilakukan-
sumber
Dalam kasus saya, ini karena ID Klien Google yang salah. Saya mengubah kunci saya ke kunci yang terdaftar di
google-services.json
( di bawahoauth_client
objek)sumber
Pastikan Anda telah menyiapkan hal-hal berikut dengan benar:
strings.xml
,google-services.json
ataucredentials.json
file.sumber
https://developers.google.com/identity/sign-in/android/sign-in ikuti dokumentasi api ini tetapi perlu diingat bahwa di dalam WEB_CLIENT_ID gunakan nilai id klien yang dihasilkan di dalam file google-services.json.
sumber
Dalam kasus saya, Setelah menambahkan sidik jari di konsol Firebase, itu secara otomatis diambil oleh konsol pengembang Google dan menunjukkan sidik jarinya. Tapi tidak berhasil masuk. Setelah melihat setiap langkah, saya menyimpulkan bahwa Google membalik paket file manifes saya seperti ini
com.xxxxxxxx.app
. Tapi sebenarnyaapp.xxxxxxxx.com
, di konsol pengembang Google. Jadi saya menghapus otomatis membuat sidik jari dan menambahkan sidik jari dengan nama paket yang benar. LEDAKAN!!. Berhasil.sumber
Kesalahan muncul pada saya ketika opsi Google tidak diaktifkan, seperti yang ditunjukkan pada gambar .
Itu terjadi ketika saya mengubah akun Google dan lupa mengaktifkan opsi untuk menghubungkan dengan Google.
sumber
Pastikan proyek Anda tidak boleh berisi karakter khusus apa pun termasuk angka atau simbol apa pun (nama proyek harus sesederhana com.google.testproject)
sumber
Dalam kasus saya, saya mengerjakan aplikasi non-produksi, masalahnya adalah saat membuat proyek di konsol firebase, ada masalah saat menyinkronkan kunci SHA-1 secara bolak-balik dari konsol pengembang Firebase & Google. Jadi, saya memutuskan untuk membuat proyek terlebih dahulu di konsol Pengembang Google, lalu memilihnya saat membuat proyek baru di konsol Firebase.
Saya juga membuat tutorial untuk ini, yang mungkin bisa membantu Anda.
sumber
Dalam kasus saya, masalahnya adalah emulator saya tidak memiliki Play Store. Saya telah membuat emulator (bernama API 23) melalui Visual Studio, karena saya mengembangkan menggunakan Xamarin.Forms juga, dan di Pengelola Perangkat Android Visual Studio Anda dapat memilih apakah emulator Anda harus memiliki Google Play Store.
Harus membuat emulator melalui AVD Android Studio dan memastikannya memiliki Play Store:
sumber
Dalam kasus saya, kesalahan ini terjadi karena autentikasi android telah dihapus oleh tim senior karena tampaknya tidak diperlukan kunci android dalam otentikasi backend. Jadi baik kunci klien Android dan Web diperlukan dalam login google.
sumber
Coba opsi ini:
Ini meminta kata sandi dan cukup masukkan kata sandi. Anda dapat melihat sidik jari SHA1, MD5.
sumber