android — При использовании Firebase, GoogleSignIn помечается как внутренний и не должен быть доступен из приложений" />

При использовании Firebase, GoogleSignIn помечается как внутренний и не должен быть доступен из приложений

Я пытаюсь получить список адресов электронной почты вошедшего в систему пользователя в моем приложении для Android. Начиная с учебного здесь следующей строки:

mGoogleSignInClient = GoogleSignIn.getClient(this, gso);

приводит к ошибке Android Studio: «GoogleSignIn помечен как внутренний и не должен быть доступен из приложений».

Проект компилируется, но когда я пытаюсь войти в систему, logcat выводит:

W/GooglePlayServicesUtil: Google Play services out of date.  Requires 12210000 but found 11947470

Мой app/gradle.build содержит:

dependencies {
    ...
    implementation 'com.google.android.gms:play-services-auth:12.0.0'
    implementation 'com.google.firebase:firebase-core:12.0.0'
    implementation 'com.google.firebase:firebase-firestore:12.0.0'
}
apply plugin: 'com.google.gms.google-services'

и когда я комментирую Firebase out:

dependencies {
    ...
    implementation 'com.google.android.gms:play-services-auth:12.0.0'
    //implementation 'com.google.firebase:firebase-core:12.0.0'
    //implementation 'com.google.firebase:firebase-firestore:12.0.0'
}
//apply plugin: 'com.google.gms.google-services'

Я не получил ошибку и успешно вошел в систему.

Я хочу интегрировать Firestorm в свое приложение. Нужно ли переделывать процесс входа? Если да, то как?

Для воспроизведения вот мой MainActivity. Скомпилированная Firebase, Log.w вызывает вывод signInResult:failed code=12500:

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    static final int RC_SIGN_IN = 1000;
    GoogleSignInClient mGoogleSignInClient;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                .requestEmail()
                .build();
        mGoogleSignInClient = GoogleSignIn.getClient(this, gso);
        findViewById(R.id.google_sign_in_button).setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        startActivityForResult(mGoogleSignInClient.getSignInIntent(), RC_SIGN_IN);
    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == RC_SIGN_IN) {
            Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data);
            handleSignInResult(task);
        }
    }

    private void handleSignInResult(Task<GoogleSignInAccount> completedTask) {
        try {
            GoogleSignInAccount account = completedTask.getResult(ApiException.class);
        } catch (ApiException e) {
            Log.w("signInResult:failed code=" + e.getStatusCode());
        }
    }
}

и мой макет:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.XXX.MainActivity">
    <com.google.android.gms.common.SignInButton
        android:id="@+id/google_sign_in_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"/>
</android.support.constraint.ConstraintLayout>
7 голосов | спросил Dori 24 MarpmSat, 24 Mar 2018 14:42:05 +03002018-03-24T14:42:05+03:0002 2018, 14:42:05

4 ответа


0

https://developers.google.com/android/guides/releases

  

Известные проблемы с версией 12.0.0

     

...

     
  • Аннотация вызывает ложные ошибки ворса, утверждая, что GoogleSignIn и CredentialsClient предназначены только для внутреннего использования. Это можно смело игнорировать.
  •   
ответил N1hk 26 MarpmMon, 26 Mar 2018 21:20:11 +03002018-03-26T21:20:11+03:0009 2018, 21:20:11
0

В качестве временного исправления, пока Google не обновит свою документацию для правильного использования GoogleSignIn после добавления @Hide Аннотация, вернитесь к версии 11.8.0 для обоих сервисы Google Play и Firebase .

ответил Daewin 25 MaramSun, 25 Mar 2018 03:46:30 +03002018-03-25T03:46:30+03:0003 2018, 03:46:30
0

Попробуйте добавить вызов метода requestProfile() при создании GoogleSignInOptions объект, подобный этому:

GoogleSignInOptions gso = new 
GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
            .requestEmail()
            .requestProfile() //Added
            .build();

 mGoogleSignInClient = GoogleSignIn.getClient(this, gso);
ответил Alex Mamo 26 MarpmMon, 26 Mar 2018 18:32:35 +03002018-03-26T18:32:35+03:0006 2018, 18:32:35
0

Попробуйте использовать implementation 'com.google.android.gms:play-services-auth:11.8.0'

ответил Afr0man17 24 MarpmSat, 24 Mar 2018 17:53:23 +03002018-03-24T17:53:23+03:0005 2018, 17:53:23

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132