对于我正在开发的 android 应用程序,它需要创建配置文件以向其他用户发送和接收内容。对于登录过程,用户是否可以使用手机上关联的 Gmail 帐户登录?这将是使用 google play 的活跃帐户。
这将使整个登录过程非常顺利,我认为这将是最好的方案。
非常感谢!
对于我正在开发的 android 应用程序,它需要创建配置文件以向其他用户发送和接收内容。对于登录过程,用户是否可以使用手机上关联的 Gmail 帐户登录?这将是使用 google play 的活跃帐户。
这将使整个登录过程非常顺利,我认为这将是最好的方案。
非常感谢!
是的,这是可能的,而且很简单。在你开始之前你需要添加一个权限给你 AndroidManifest.xml
<uses-permission android:name="android.permission.GET_ACCOUNTS"></uses-permission>
它允许您读取与设备关联的帐户。然后在应用程序中执行以下操作:
Account[] accounts = AccountManager.get(context).getAccountsByType("com.google");
这将返回用户的所有 google 帐户。在您的情况下,您可能只需要电子邮件,所以这里有一个快速的静态函数,可以将它们提供给您:
public static String[] getAccounts(Context context) {
Account[] accounts = AccountManager.get(context).getAccountsByType("com.google");
String[] names = new String[accounts.length];
for (int i = 0; i < accounts.length; ++i) names[i] = accounts[i].name;
return names;
}
此函数将返回设备上所有 gmail 电子邮件(Google 帐户)的字符串数组。
但是,如果您需要与某些 Google 服务“交谈”以获取更多信息,则必须执行以下操作。首先向清单添加一个权限:
<uses-permission android:name="android.permission.USE_CREDENTIALS"></uses-permission>
此权限将允许您的应用使用使用凭据在某些 Google 服务前识别用户。它不会给你凭据(密码)。
要使用某些 Google 服务,您需要一个令牌。这是一个快速功能:
public static String getToken(Activity activity, String serviceName) {
try {
Bundle result = AccountManager.get(activity).getAuthToken(account, serviceName, null, activity, null, null).getResult();
return result.getString(AccountManager.KEY_AUTHTOKEN);
} catch (OperationCanceledException e) {
Log.d("Test", "Operation Canceled");
} catch (AuthenticatorException e) {
Log.d("Test", "Authenticator Exception");
} catch (IOException e) {
Log.d("Test", "Auth IOException");
}
return null;
}
一旦你有了令牌,你就只是他们拥有的 HTTP API,你会玩得很开心:-)