Как узнать индивидуальные разрешения для областей при использовании Google + войти? - PullRequest
0 голосов
/ 28 января 2019

Прямо сейчас я могу использовать вход в Google с помощью следующего кода.И я добавил все необходимые рамки в нем.Но можно ли запросить у permission базовые данные профиля в одном dialog и получить доступ к контактам из разных dialog?

private void initGoogleLogin() {
        Scope SCOPE_CONTACTS_READ =
                new Scope("https://www.googleapis.com/auth/contacts.readonly");
        gp.setOnClickListener(v -> signIn());
        GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                .requestScopes(new Scope(Scopes.PROFILE))
                .requestScopes(new Scope(Scopes.PLUS_ME))
                .requestScopes(SCOPE_CONTACTS_READ)
                .requestScopes(new Scope("https://www.googleapis.com/auth/plus.login"))
                .requestIdToken(Constants.GOOGLESERVERAUTHCODE)
                .requestEmail().requestServerAuthCode(Constants.GOOGLESERVERAUTHCODE).requestProfile().build();
        mgoogleSignInClient = GoogleSignIn.getClient(this, gso);
        mGoogleApiClient = new GoogleApiClient.Builder(this)
                .enableAutoManage(this, this)
                .addApi(Auth.GOOGLE_SIGN_IN_API, gso)
                .build();
        }

Этот код запрашивает все разрешения в одном диалоговом окне.Но нет возможности отказать в обмене контактами.Итак, как я могу достичь функциональности, когда пользователь может разрешить основную информацию в профиле и запретить делиться контактами.И как справиться с этим в onActivityResult

1 Ответ

0 голосов
/ 28 января 2019

Прежде всего, запрашиваемые вами области плюс устарели и в течение нескольких дней приведут к сбоям.См. https://developers.google.com/+/api-shutdown

Однако для запроса разрешений на разных экранах вы должны иметь возможность запрашивать дополнительные области , когда они вам нужны, и изящно обрабатывать, если пользователь их отклоняет.

Не проверено, но что-то вроде:

GoogleSignIn.requestPermissions(
        MyActivity.this,
        RC_REQUEST_PERMISSION_CONTACTS,
        GoogleSignIn.getLastSignedInAccount(getActivity()),
        SCOPE_CONTACTS_READ);

в onActivityResults() это может быть что-то вроде

public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (resultCode == Activity.RESULT_OK) {
        if (RC_REQUEST_PERMISSION_CONTACTS == requestCode) {
            // They've accepted it
        }
    }
}
...