Подпись Google Firebase, указывающая статус 12501 (не работает), в варианте сборки сборки и jks SHA

Я знаю, что многие из них задали этот вопрос и получили ответ.

Итак, почему я снова задаю этот вопрос? Потому что я пробовал эти решения, и я следил за документами Google, следил за учебниками и youtube. Еще не повезло.

Охота, это то, что я сделал в своем проекте.

Проект: GoogleSignIn

dependencies {
        classpath 'com.android.tools.build:gradle:2.2.0'
        classpath 'com.google.gms:google-services:3.0.0'
      }

Gradle (Модуль: приложение)

apply plugin: 'com.android.application'

android {
    signingConfigs {
        config {
            keyAlias 'alias'
            keyPassword 'keypass'
            storeFile file('/home/reoxey/path/to/jks')
            storePassword 'storepass'
        }
    }
    compileSdkVersion 25
    buildToolsVersion "25.0.0"
    defaultConfig {
        applicationId "reoxey.com.googlesignin"
        minSdkVersion 19
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            signingConfig signingConfigs.config
        }
    }
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:appcompat-v7:25.0.0'
    compile 'com.android.support:design:25.0.0'
    compile 'com.google.firebase:firebase-auth:9.8.0'
    compile 'com.google.android.gms:play-services-auth:9.8.0'
    testCompile 'junit:junit:4.12'
}

apply plugin: 'com.google.gms.google-services'

LoginActivity.java

gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                .requestIdToken(getString(R.string.web_client_key))
                .requestEmail()
                .build();

        mGoogleApiClient = new GoogleApiClient.Builder(this)
                .enableAutoManage(this, this)
                .addApi(Auth.GOOGLE_SIGN_IN_API, gso)
                .build();

        findViewById(R.id.sign_in_button).setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient);
                startActivityForResult(signInIntent, RC_SIGN_IN);
            }
        });
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == RC_SIGN_IN){
            GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
            if (result.isSuccess()){
                Toast.makeText(getApplicationContext(),"Nailed it",Toast.LENGTH_LONG).show();
            }else {
                Snackbar.make(mLoginFormView,result.getStatus().toString(),Snackbar.LENGTH_LONG).show();
                Toast.makeText(getApplicationContext(),"Messed",Toast.LENGTH_LONG).show();

            }
        }
    }

string.xml

<string name="web_client_key">123456789-clientwebapplication.apps.googleusercontent.com</string>

В манифесте нет специальной конфигурации, и я считаю, что там ничего не пропало.

Google-services.json

{
  "project_info": {
    "project_number": "{numeric-id}",
    "firebase_url": "https://project--123456789.firebaseio.com",
    "project_id": "project--123456789",
    "storage_bucket": "project--123456789.appspot.com"
  },
  "client": [
    {
      "client_info": {
        "mobilesdk_app_id": "1:{numeric-id}:android:sfdjgsdkdfgsfs",
        "android_client_info": {
          "package_name": "reoxey.com.googlesignin"
        }
      },
      "oauth_client": [
        {
          "client_id": "{numeric-id}-androidkey.apps.googleusercontent.com",
          "client_type": 1,
          "android_info": {
            "package_name": "reoxey.com.googlesignin",
            "certificate_hash": "{sha1-from-jks-file}"
          }
        },
        {
          "client_id": "{numeric-id}-webapplication.apps.googleusercontent.com",
          "client_type": 3
        }
      ],
      "api_key": [
        {
          "current_key": "{android-key}"
        }
      ],
      "services": {
        "analytics_service": {
          "status": 1
        },
        "appinvite_service": {
          "status": 2,
          "other_platform_oauth_client": [
            {
              "client_id": "{numeric-id}-webapplication.apps.googleusercontent.com",
              "client_type": 3
            }
          ]
        },
        "ads_service": {
          "status": 2
        }
      }
    }
  ],
  "configuration_version": "1"
}

Oright, теперь консоль Firebase.

  • созданный проект с именем пакета
  • добавлен отпечаток sha1, сгенерированный из файла jks
  • включена аутентификация для google signin

что я думаю, надеюсь, что я все предоставил,
так что мне здесь не хватает.

Когда я нажимаю на знак google, это приводит к ошибке с кодом статуса 12501. Я не знаю, что здесь не так. Кто угодно?

Спасибо в Advance.

Ответ 1

Если вы добавляете все отпечатки пальцев SHA-1 в firebase, вы все равно получаете сообщение об ошибке .then(я столкнулся с этой проблемой. после этого шаги он решил.) Попробуйте выполнить следующие действия:

1. Вернитесь на страницу учетных данных API Google Консоли.

2.Нажмите учетные данные на вкладке слева.

3. Уже присутствуют два идентификатора клиента Android и Web OAuth по умолчанию. Вам необходимо создать клиент One Client и один клиент Web 2.0.

4.Go to Firebase. В настройках проекта загрузите google-services.json и вставьте в папку приложения.

(Все в порядке, но все же вы не можете подписаться на Google, возможно, на проблему OAuth, поэтому обязательно создайте идентификатор Android и веб-клиента. Наконец, на странице учетных данных есть два клиента Android и два идентификатора веб-клиента.)

Заполните экран содержимого OAuth также

Ответ 2

Когда вы создаете свой GoogleSignInOptions, вы используете строковый ресурс web_client_key. По соображениям безопасности вы не опубликовали реальный ключ и вместо этого использовали примерное значение 123456789-clientwebapplication.apps.googleusercontent.com..

Это примерное значение не отображается в опубликованном google-services.json, поэтому я не могу сопоставить его со значениями. Значение должно быть client_id, определенным в этом блоке:

{
  "client_id": "{numeric-id}-webapplication.apps.googleusercontent.com",
  "client_type": 3
}

Это значение, которое вы использовали?

обычный способ получения идентификатора веб-клиента - использовать строковый ресурс R.string.default_web_client_id, который генерируется Google Services Gradle Плагин от google-services.json. Есть ли причина, по которой вы не можете этого сделать, и должен определить собственный собственный ресурс? Вы пробовали использовать default_web_client_id?