现在可以通过以下代码使用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
答案 0 :(得分:1)
首先,您所要求的加号范围已被弃用,并会在几天内导致失败。参见https://developers.google.com/+/api-shutdown
但是,要在不同的屏幕上请求权限,您应该能够在需要时request additional scopes,并在用户拒绝时优雅地进行处理。
未经测试,但类似于:
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
}
}
}