使用Gmail帐户登录我的应用程序?

时间:2012-05-10 18:07:29

标签: javascript android security gmail

对于我正在处理的Android应用,它需要创建一个配置文件来向其他用户发送和接收内容。对于登录过程,用户是否可以使用手机上关联的Gmail帐户登录?这与使用谷歌播放活跃的帐户相同。

这将使整个登录过程非常顺利,我认为这将是最好的方案。

非常感谢!

1 个答案:

答案 0 :(得分:0)

是的,这是可能的,而且很简单。在开始之前,您需要向AndroidManifest.xml添加一个权限

<uses-permission android:name="android.permission.GET_ACCOUNTS"></uses-permission>

它允许您阅读与设备关联的帐户。然后在app中执行以下操作:

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,就可以获得乐趣: - )