从 GooglePlus 登录获取访问令牌
Getting Access token from GooglePlus Sign in
我目前正在编写一个 googleplus 登录应用程序,但我一直无法从 google 获取访问令牌。我已阅读 google 以及有关获取访问令牌的文档 here。而且我不确定如何实施它。
下面显示了我实现 gplus 登录的部分代码:
public class GplusAction implements LoginInterface,LogoutInterface{
private GoogleApiClient googleApiClient;
private GoogleSignInOptions googleSignInOptions;
private Context context;
private final static int REQ_CODE = 777;
private Intent signInIntent;
private String accountname;
public GplusAction(Context context) {
this.context = context;
googleSignInOptions = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestEmail()
.build();
googleApiClient = new GoogleApiClient.Builder(context)
.addApi(Auth.GOOGLE_SIGN_IN_API, googleSignInOptions)
.build();
}
@Override
public void login() {
signInIntent = Auth.GoogleSignInApi.getSignInIntent(googleApiClient);
startActivityForResult((Activity) context, signInIntent, REQ_CODE, null);
}
@Override
public void logout() {
Auth.GoogleSignInApi.signOut(googleApiClient);
}
@Override
public void get_onActivityResult(int requestCode, int resultCode, Intent data) {
if(requestCode == REQ_CODE){
GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(signInIntent);
}
}
我曾尝试使用 GoogleAuthUtils,但它似乎已被弃用,如上文 link 所述。
所以这是我的问题:
- 如何使用新方法检索访问令牌?
有什么想法吗?
要获取授权令牌以通过服务器进行身份验证,您需要按照以下步骤操作。
1) 从您的应用程序项目的 google 控制台获取 Web 应用程序的客户端 ID。
2) 创建 GoogleApiClient
的实例,下面 GoogleSignInOptions
传递上面的客户端 ID。
String serverClientId = getString(R.string.server_oauth_client_id);
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestIdToken(serverClientId )
.build();
3) 登录成功后,您可以从 GoogleSignInResult 中获取 ID 令牌。
GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
if (result.isSuccess()) {
GoogleSignInAccount acct = result.getSignInAccount();
String idToken = acct.getIdToken();
}
我目前正在编写一个 googleplus 登录应用程序,但我一直无法从 google 获取访问令牌。我已阅读 google 以及有关获取访问令牌的文档 here。而且我不确定如何实施它。
下面显示了我实现 gplus 登录的部分代码:
public class GplusAction implements LoginInterface,LogoutInterface{
private GoogleApiClient googleApiClient;
private GoogleSignInOptions googleSignInOptions;
private Context context;
private final static int REQ_CODE = 777;
private Intent signInIntent;
private String accountname;
public GplusAction(Context context) {
this.context = context;
googleSignInOptions = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestEmail()
.build();
googleApiClient = new GoogleApiClient.Builder(context)
.addApi(Auth.GOOGLE_SIGN_IN_API, googleSignInOptions)
.build();
}
@Override
public void login() {
signInIntent = Auth.GoogleSignInApi.getSignInIntent(googleApiClient);
startActivityForResult((Activity) context, signInIntent, REQ_CODE, null);
}
@Override
public void logout() {
Auth.GoogleSignInApi.signOut(googleApiClient);
}
@Override
public void get_onActivityResult(int requestCode, int resultCode, Intent data) {
if(requestCode == REQ_CODE){
GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(signInIntent);
}
}
我曾尝试使用 GoogleAuthUtils,但它似乎已被弃用,如上文 link 所述。
所以这是我的问题: - 如何使用新方法检索访问令牌?
有什么想法吗?
要获取授权令牌以通过服务器进行身份验证,您需要按照以下步骤操作。
1) 从您的应用程序项目的 google 控制台获取 Web 应用程序的客户端 ID。
2) 创建 GoogleApiClient
的实例,下面 GoogleSignInOptions
传递上面的客户端 ID。
String serverClientId = getString(R.string.server_oauth_client_id);
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestIdToken(serverClientId )
.build();
3) 登录成功后,您可以从 GoogleSignInResult 中获取 ID 令牌。
GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
if (result.isSuccess()) {
GoogleSignInAccount acct = result.getSignInAccount();
String idToken = acct.getIdToken();
}