Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/186.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
谷歌+;登录Android-谷歌权限活动结果代码_Android_Login_Google Plus_Google Login_Google Signin - Fatal编程技术网

谷歌+;登录Android-谷歌权限活动结果代码

谷歌+;登录Android-谷歌权限活动结果代码,android,login,google-plus,google-login,google-signin,Android,Login,Google Plus,Google Login,Google Signin,在使用Android的Google+Sign时,我发现了一个小问题,在搜索完网络后(很明显),我大声问自己的问题,看看是否有人注意到了同样的问题 我正在为我的应用程序启用服务器端API访问,如上所述 让我详细说明发生了什么事。以这个片段为例: Bundle appActivities = new Bundle(); appActivities.putString(GoogleAuthUtil.KEY_REQUEST_VISIBLE_ACTIVITIES, "<APP-A

在使用Android的Google+Sign时,我发现了一个小问题,在搜索完网络后(很明显),我大声问自己的问题,看看是否有人注意到了同样的问题

我正在为我的应用程序启用服务器端API访问,如上所述 让我详细说明发生了什么事。以这个片段为例:

Bundle appActivities = new Bundle();
appActivities.putString(GoogleAuthUtil.KEY_REQUEST_VISIBLE_ACTIVITIES,
          "<APP-ACTIVITY1> <APP-ACTIVITY2>");
String scopes = "oauth2:server:client_id:<SERVER-CLIENT-ID>:api_scope:<SCOPE1> <SCOPE2>";
String code = null;
try {
  code = GoogleAuthUtil.getToken(
      this,                                              // Context context
      Plus.AccountApi.getAccountName(mGoogleApiClient),  // String accountName
      scopes,                                            // String scope
      appActivities                                      // Bundle bundle
  );

} catch (IOException transientEx) {
  // network or server error, the call is expected to succeed if you try again later.
  // Don't attempt to call again immediately - the request is likely to
  // fail, you'll hit quotas or back-off.
  ...
  return;
} catch (UserRecoverableAuthException e) {
  // Requesting an authorization code will always throw
  // UserRecoverableAuthException on the first call to GoogleAuthUtil.getToken
  // because the user must consent to offline access to their data.  After
  // consent is granted control is returned to your activity in onActivityResult
  // and the second call to GoogleAuthUtil.getToken will succeed.
  startActivityForResult(e.getIntent(), AUTH_CODE_REQUEST_CODE);
  return;
} catch (GoogleAuthException authEx) {
  // Failure. The call is not expected to ever succeed so it should not be
  // retried.
  ...
  return;
} catch (Exception e) {
  throw new RuntimeException(e);
}
Bundle appActivities=new Bundle();
appActivities.putString(GoogleAuthUtil.KEY\u请求\u可见\u活动,
" ");
String scopes=“oauth2:server:client_id::api_scope:”;
字符串代码=null;
试一试{
code=GoogleAuthUtil.getToken(
这个,//上下文
Plus.AccountApi.getAccountName(mGoogleApiClient),//字符串accountName
作用域,//字符串作用域
appActivities//Bundle
);
}捕获(IOException transientEx){
//网络或服务器错误,如果您稍后重试,呼叫将成功。
//不要立即尝试再次呼叫-请求可能会被拒绝
//如果失败,您将达到配额或退出。
...
返回;
}捕获(UserRecoverableAuthe异常){
//请求授权码将始终引发
//第一次调用GoogleAuthUtil.getToken时出现UserRecoverableAuthException
//因为用户必须同意脱机访问其数据。之后
//在onActivityResult中将控制权返回到您的活动时,将授予同意
//第二次调用GoogleAuthUtil.getToken将成功。
startActivityForResult(例如getIntent(),验证代码\请求代码);
返回;
}捕获(GoogleAuthException authEx){
//失败。该调用预计不会成功,因此不应成功
//重试。
...
返回;
}捕获(例外e){
抛出新的运行时异常(e);
}
请参阅
UserRecoverableAuthException
及其注释?这就是我想跟你说的。如您所见,在这种情况下,另一个活动将启动,并开始一个流程,您必须接受应用程序请求的权限。如您所见,正在使用
startActivityForResult
方法。我观察到,当用户接受授予权限时,会返回
Activity.RESULT\u OK
,但
Activity.RESULT\u cancelled
会在发生错误/崩溃或用户拒绝授予权限并取消流时返回


所以这里是(是的,最后!)我的问题。。。我如何区分一种情况(错误/崩溃)和另一种情况(可能的用户流)?

好吧,经过一段时间的斗争,我想我找到了一个解决方案。我不知道这是否是正确的方法,但我想我应该分享它,所以它来了

我们拥有执行登录/登录的活动应该实现的
onActivityresult
方法

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
     (...)
}
我的想法(经过一段时间的思考,后来得到了证实)是,
Intent data
参数应该有某种关于返回何种错误或结果的线索或信息。仔细检查后,我发现在用户拒绝该应用程序的权限的情况下,这个意图有一个额外的字符串,带有key
Error
和value
UserCancel
。这就是我最后用来区分两个案例的方法。希望有帮助

   data.getExtraString("Error"); // This should have the value "UserCancel" when the user    
                                 // refused to give the permissions required by the app. 
请注意,
data
intent可能并不总是提供这个外字符串,事实上,对于
onActityResult
的一些调用,它可能是
null
,因此在使用它之前,您应该检查
if(data!=null)