本文档主要介绍了使用具有后端服务器的应用程序的授权码来获取用户和会话信息。
使用此流程:
token
和 refresh_token
。
授权码是一个一次性码,您的后端服务器可以使用它与now.gg服务器交换,以获得 token
和 refresh_token
。
要使用 client_id
生成授权码并为用户登录,请参阅以下实现:
public static final String CODE = "code"; public static final String CLIENT_ID = "your client id"; public static final String ACCOUNT_TYPE = "now.gg"; public static final String HOST_URL = "hostUrl"; private void signIn() { Account account = getNowggAccount(); if (account != null) { Bundle bundle = new Bundle(); bundle.putString("client_id", CLIENT_ID); String authTokenType = CODE; AccountManager.get(getApplicationContext()). getAuthToken(account, authTokenType, bundle, MainActivity.this, new OnTokenAcquired(), null); } else { addNowggAccount(); } } private Account getNowggAccount() { Account[] accounts = AccountManager.get(getApplicationContext()).getAccountsByType(ACCOUNT_TYPE); if (accounts.length > 0) { Log.d(TAG, "getNowggAccount: account found"); // 当前仅支持在系统中添加一个now.gg账户 return accounts[0]; } return null; } private void addNowggAccount() { try { Intent intent = new Intent(); intent.setComponent(new ComponentName("gg.now.accounts", "gg.now.accounts.AuthenticatorActivity")); intent.setAction("IAP_ADD_ACCOUNT"); startActivity(intent); } catch (ActivityNotFoundException e) { e.printStackTrace(); } }
注意:这个过程将在 OnTokenAcquired()
函数中生成一个回调。
用户登录后,您将在 OnTokenAcquired
回调函数中获得请求的授权码。要获取授权码,请参考以下示例:
private class OnTokenAcquired implements AccountManagerCallback { @Override public void run(AccountManagerFuture result) { try { Bundle bundle = result.getResult(); boolean success = bundle.getBoolean(AccountManager.KEY_BOOLEAN_RESULT, false); if (success) { final String code = bundle.getString(‘authorization_code’); // 您需要将此code发送到您应用的后端服务器,并用它在应用后端服务器调用生成令牌API以获取refresh_token/token,并等待服务器响应。 } else { // 获取令牌失败 // 发生错误时,开发者可以显示错误或者展示其它登录方式。 Log.d(TAG, "run: get token failed " + bundle); } } catch (AuthenticatorException e) { e.printStackTrace(); } catch (IOException exception) { exception.printStackTrace(); } catch (OperationCanceledException e) { e.printStackTrace(); } } }
一旦您有了授权码,将其发送到您的应用程序后端服务器,并使用 生成令牌API 同now.gg服务器交换此授权码以获取 token
和 refresh_token
。
token
调用now.gg API(用户信息和会话信息)。refresh_token
,以在令牌过期时获取新的令牌。有了 token
,您可以使用它来获取用户和会话信息。
如果您的 token
已过期,您可以通过 refresh_token
使用 生成令牌API 来生成它。