9

Tôi đã tạo điểm cuối bằng chương trình phụ trợ an toàn và đã sử dụng nó từ tháng 3 trên ứng dụng tôi đang tạo (tài liệu nguồn here). Gần đây tôi đã cài đặt phiên bản mới nhất cho thiết bị Android 6.0 của mình và một lỗi lạ xuất hiện (nó hoạt động hoàn hảo trên 4.2.2 & 5.1).Tên GoogleAccountCredential là null mặc dù gọi setSelectedAccountName (Android 6.0)

Các lỗi cụ thể là:

IllegalArgumentException: the name must not be empty: null 

Mà tôi bắt nguồn từ một lỗi với chứng chỉ, bạn sẽ nhìn thấy mã dưới đây. Trên tài khoản Android 6.0 có thể là "[email protected]" nhưng chuỗi 'test' hóa ra là null!

Có điều gì cụ thể về 6.0 đã thay đổi GoogleAccountCredential không?

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; 
} 

Trả lời

13

Có với Android 6.0 Marshmallow, bạn sẽ bây giờ cần phải điều khoản yêu cầu tại thời gian chạy https://developer.android.com/training/permissions/index.html

Để có được những thông tin bạn cần sự cho phép GET_ACCOUNTS trong LIÊN HỆ nhóm

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

Bạn sẽ phải yêu cầu nó trong hoạt động/đoạn của bạn và xử lý bất kỳ UX nào liên quan đến ứng dụng của bạn.

+0

Đã thêm quyền đó. – easycheese

+0

bạn đang yêu cầu hay nó chỉ nằm trong tệp kê khai của bạn? – AndroidEnthusiast

+0

Oh crap ... Thậm chí không nghĩ về điều đó, bạn sẽ nghĩ rằng lint sẽ bắt nó .... Hoặc rằng một lỗi tốt hơn sẽ được ném. Bạn có lẽ đúng, tôi sẽ kiểm tra nó mặc dù. – easycheese

Các vấn đề liên quan