尽管调用setSelectedAccountName(Android 6.0),GoogleAccountCredential名称仍然为null [英] GoogleAccountCredential name is null despite calling setSelectedAccountName (Android 6.0)

查看:231
本文介绍了尽管调用setSelectedAccountName(Android 6.0),GoogleAccountCredential名称仍然为null的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用受保护的后端创建了一个终端,并且自从3月份以来,我一直在使用它创建的应用(源文档这里)。我最近在我的Android 6.0设备上安装了最新版本,并且出现了一个奇怪的错误(它在4.2.2和5.1上完美运行)。



具体的错误是:

  IllegalArgumentException:名称一定不能是空的:null 

我追踪到凭证的错误,可以看到下面的代码。在Android 6.0帐户可能是user@gmail.com,但字符串'测试'结果是空!



有什么具体的关于6.0改变了GoogleAccountCredential?

  public static GoogleAccountCredential getCredential(Context ctx){

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(ctx) ;
String account = prefs.getString(UserProfileHelper.PREF_USER_ACCOUNT,);
GoogleAccountCredential凭证= GoogleAccountCredential.usingAudience(ctx,
server:client_id:MY_ACCOUNT_NUMS.apps.googleusercontent.com)
.setSelectedAccountName(account);


String test = credential.getSelectedAccountName();
返回凭证;
}


解决方案

Yes with Android 6.0 Marshmallow,您现在需要在运行时请求权限 https://developer.android.com/training/permissions/index。为了获得这些凭据,您需要在CONTACTS组中获得GET_ACCOUNTS权限。



https://developer.android.com/guide/topics/security/permissions.html#正常危险的



您必须在您的活动/片段中请求它并处理与您的应用有关的任何UX。


I've created an endpoint using a secured backend and have been using it since March on an app I'm building (source docs here). I recently installed the latest version to my Android 6.0 device and an odd error popped up (it works perfectly on 4.2.2 & 5.1).

The specific error is:

IllegalArgumentException: the name must not be empty: null 

Which I traced to an error with the credential, you can see the code below. On Android 6.0 account may be "user@gmail.com" but the string 'test' turns out to be null!

Is there something specific about 6.0 that changed GoogleAccountCredential?

public static GoogleAccountCredential getCredential(Context ctx) {

    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(ctx);
    String account = prefs.getString(UserProfileHelper.PREF_USER_ACCOUNT, "");
    GoogleAccountCredential credential = GoogleAccountCredential.usingAudience(ctx,
            "server:client_id:MY_ACCOUNT_NUMS.apps.googleusercontent.com")
            .setSelectedAccountName(account);


    String test = credential.getSelectedAccountName();
    return credential;
}

解决方案

Yes with Android 6.0 Marshmallow, you will now need to request permissions at run time https://developer.android.com/training/permissions/index.html

In order to get those credentials you need the GET_ACCOUNTS permission in the CONTACTS group

https://developer.android.com/guide/topics/security/permissions.html#normal-dangerous

You will have to request it in your activity/fragment and handle any UX pertaining to your app.

这篇关于尽管调用setSelectedAccountName(Android 6.0),GoogleAccountCredential名称仍然为null的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆