【问题标题】:Accessing Google Account Id /username via Android通过 Android 访问 Google 帐户 ID/用户名
【发布时间】:2011-01-15 18:38:07
【问题描述】:

您如何在代码中访问用户的 Google 帐户 ID/用户名?我正在构建一个将调用 Web 服务来存储数据的应用程序,并且我想识别提交数据的人的身份。

【问题讨论】:

标签: android google-account


【解决方案1】:

我遇到了同样的问题,这两个链接为我解决了:

第一个是这个:How do I retrieve the logged in Google account on android phones?

其中显示了用于检索与手机关联的帐户的代码。基本上你需要这样的东西:

AccountManager manager = (AccountManager) getSystemService(ACCOUNT_SERVICE);
Account[] list = manager.getAccounts();

并在AndroidManifest.xml中添加权限

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

此外,如果您使用模拟器,以下链接将帮助您使用帐户进行设置:Android Emulator - Trouble creating user accounts

基本上,它说您必须基于 API 级别而不是 SDK 版本创建一个 android 设备(就像通常所做的那样)。

【讨论】:

【解决方案2】:

有一个来自 google 的示例,它列出了现有的 google 帐户并在选择时生成一个访问令牌,您可以将该访问令牌发送到服务器以从中检索相关详细信息以识别用户。

您也可以从 access token 中获取 email id,为此您需要修改 SCOPE

请转至My Post

【讨论】:

    【解决方案3】:

    此方法获取谷歌用户名:

     public String getUsername() {
        AccountManager manager = AccountManager.get(this);
        Account[] accounts = manager.getAccountsByType("com.google");
        List<String> possibleEmails = new LinkedList<String>();
    
        for (Account account : accounts) {
            // TODO: Check possibleEmail against an email regex or treat
            // account.name as an email address only for certain account.type
            // values.
            possibleEmails.add(account.name);
        }
    
        if (!possibleEmails.isEmpty() && possibleEmails.get(0) != null) {
            String email = possibleEmails.get(0);
            String[] parts = email.split("@");
            if (parts.length > 0 && parts[0] != null)
                return parts[0];
            else
                return null;
        } else
            return null;
    }
    

    简单的调用这个方法......

    并在 Gmail id 中获取 Google 用户::

     accounts = AccountManager.get(this).getAccounts();
        Log.e("", "Size: " + accounts.length);
        for (Account account : accounts) {
    
            String possibleEmail = account.name;
            String type = account.type;
    
            if (type.equals("com.google")) {
                strGmail = possibleEmail;
    
                Log.e("", "Emails: " + strGmail);
                break;
            }
        }
    

    在清单中添加权限后;

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

    【讨论】:

    • 为什么需要互联网和访问网络状态权限?
    【解决方案4】:
    String name = android.os.Build.USER;
    
    if (!TextUtils.isEmpty(name)) {
        nameEdit.setText(name);
    }
    

    【讨论】:

    • 好吧,我试过了,它返回了“dpi”。显然不是用户名。
    【解决方案5】:
    if (Plus.PeopleApi.getCurrentPerson(mGoogleApiClient) != null) {
      Person currentPerson = Plus.PeopleApi.getCurrentPerson(mGoogleApiClient);
      String userid=currentPerson.getId(); //BY THIS CODE YOU CAN GET CURRENT LOGIN USER ID
    }
    

    【讨论】:

    • 你用的是什么库,我得到Plus 无法解析符号 ?
    • 这是基于使用 Google+ API 的,这对于大多数开发人员来说可能过于陌生
    【解决方案6】:

    检索已登录用户的个人资料信息 使用 GoogleSignInResult.getSignInAccount 方法请求当前登录用户的个人资料信息。 您可以在登录 Intent 成功后调用 getSignInAccount 方法。

    GoogleSignInResult result = 
    Auth.GoogleSignInApi.getSignInResultFromIntent(data);
    GoogleSignInAccount acct = result.getSignInAccount();
    String personName = acct.getDisplayName();
    String personGivenName = acct.getGivenName();
    String personFamilyName = acct.getFamilyName();
    String personEmail = acct.getEmail();
    String personId = acct.getId();
    Uri personPhoto = acct.getPhotoUrl();
    

    【讨论】:

      【解决方案7】:

      使用了这些行:

      AccountManager manager = AccountManager.get(this);
      Account[] accounts = manager.getAccountsByType("com.google");
      

      数组帐户的长度始终为0。

      【讨论】:

      • 请使用低于Android 6.0 - 6....(API级别23-...)的android设备,因为更高版本的设备需要运行时权限,它总是返回长度0。
      猜你喜欢
      • 1970-01-01
      • 2019-01-10
      • 2021-09-05
      • 2011-10-26
      • 1970-01-01
      • 2017-11-17
      • 2014-08-01
      • 2016-02-19
      相关资源
      最近更新 更多