2012-10-02 23 views
9

Cập nhật:mới phát hành "Xác thực với dịch vụ Google Play", Vấn đề với nhận một mã thông báo qua GoogleAuthUtil.getToken

Chỉ cần bây giờ tôi đã đăng ký để Google API với tài khoản Google I cũng đang sử dụng cho Google App Engine và bây giờ là lỗi đã thay đổi để com.google.android.gms.auth.GoogleAuthException: Unknown


Google vừa phát hành một cách mới để sign up to one's app via a Google Account và đã đưa ra một số lời giải thích trong blogpost của họ, quá.

Tôi đang viết một ứng dụng Android, bạn phải đăng ký để tạo tài khoản người dùng và tôi đang sử dụng Google App Engine cho phần cuối. Với dịch vụ phát, tôi muốn nhận email người dùng được liên kết với thiết bị Android của họ và một mã thông báo. Tôi đã có thể nhận được email, tuy nhiên, nhận được các mã thông báo chỉ ném lỗi và do các tài liệu được khá thưa thớt, tôi không biết làm thế nào để sửa chữa những. Đó là cách tôi nhận được email:

private String[] getAccountNames() { 
    mAccountManager = AccountManager.get(this); 
    Account[] accounts = mAccountManager.getAccountsByType(GoogleAuthUtil.GOOGLE_ACCOUNT_TYPE); 
    names = new String[accounts.length]; 
    for (int i = 0; i < names.length; i++) { 
     names[i] = accounts[i].name; 
    } 

    return names; 
} 

Tuy nhiên, khi tôi gọi điện thoại token = GoogleAuthUtil.getToken(context, email, "scope", nó mang lại cho tôi những lỗi: GooglePlayServices not available due to error 1com.google.android.gms.auth.GooglePlayServicesAvailabilityException: GooglePlayServicesNotAvailable.

Bây giờ câu hỏi của tôi là, tôi có phải đặt bất kỳ quyền hoặc bao gồm bất kỳ thư viện nào để khắc phục điều đó không? Và tham số phạm vi là gì? Ví dụ về cách nhận mã thông báo và nội dung cần đưa vào phạm vi được đưa ra trong blogpost của họ để đặt biến phạm vi thành "https://www.googleapis.com/auth/userinfo.profile" nhưng tôi vẫn gặp lỗi tương tự.

Tôi cũng đã đăng ký ứng dụng của mình cho bảng điều khiển API của Google và bật API G +, tôi có phải định cấu hình ứng dụng khác ở đó không?

Trả lời

2

Bạn chỉ có thể nhận mã thông báo cho các dịch vụ của Google hỗ trợ OAuth2. Nếu bạn đang viết webservice của riêng bạn, bạn nên xác thực với nó bằng cách sử dụng cơ chế xác thực gốc của nó (tên người dùng và mật khẩu?). "Phạm vi" rõ ràng là phạm vi không hợp lệ, nhưng có vẻ như bạn chưa cài đặt Dịch vụ của Google Play và đó là nguyên nhân gây ra lỗi của bạn. Bạn có thể cài đặt nó từ Cửa hàng Play, nhưng nó sẽ không thực sự hiệu quả với bạn vì bạn không sử dụng dịch vụ của Google.

+1

Cảm ơn, tôi đang thực sự sử dụng Google App Engine mặc dù. Tuy nhiên, tôi vừa đăng ký với Tài khoản Google chính xác mà tôi cũng sử dụng công cụ ứng dụng của Google. Bây giờ, thông báo lỗi đã thay đổi thành com.google.android.gms.auth.GoogleAuthException: Không xác định. –

+0

Nếu bạn đang cố gắng xác thực với GAE bằng OAuth2, điều đó sẽ không hoạt động trừ khi bạn đang sử dụng điểm cuối, chỉ có sẵn cho 'người kiểm tra đáng tin cậy'. Bạn đang cố sử dụng phạm vi nào? Đồng thời đăng toàn bộ dấu vết ngăn xếp. –

+0

Tôi đã quên cập nhật khóa SHA1 của ứng dụng Android trong API Google. Bây giờ, tôi nhận được một mã thông báo với phạm vi "oauth2: https: //www.googleapis.com/auth/plus.me" ;. Điều đó có giải quyết được mọi thứ và đó có phải là phạm vi chính xác không? Điều gì về phạm vi "https://www.googleapis.com/auth/userinfo.profile" ;? –

3

Trước tiên, bạn cần phải vượt qua phạm vi định dạng đúng, như thế này:

private final static String G_PLUS_SCOPE = 
     "oauth2:https://www.googleapis.com/auth/plus.me"; 
    private final static String USERINFO_SCOPE = 
     "https://www.googleapis.com/auth/userinfo.profile"; 
    private final static String SCOPES = G_PLUS_SCOPE + " " + USERINFO_SCOPE; 

Bạn cũng cần phải cài đặt Google Play dịch vụ từ đây, https://play.google.com/store/apps/details?id=com.google.android.gms. Các dịch vụ của Google Play đã bắt đầu triển khai cho tất cả các thiết bị đã cài đặt Google Play (Froyo +).

Có nhiều thông tin cung cấp ở đây: http://android-developers.blogspot.com/2012/09/google-play-services-and-oauth-identity.html

20

tôi đã cùng một vấn đề bằng cách sử dụng thư viện khách hàng của Google cho Google Drive. Giải pháp khá dễ dàng. Chỉ cần thêm "oauth2:" vào scopeUrl của bạn.

sai:

GoogleAuthUtil.getToken(this, account.name, DriveScopes.DRIVE); 

Bên phải:

GoogleAuthUtil.getToken(this, account.name, "oauth2:" + DriveScopes.DRIVE); 
+0

Điều này có tác dụng đối với tôi khi cố truy cập Google Reader. – losttime

+2

Cảm ơn! Làm việc cho tôi nữa. Đối với nhiều phạm vi, bạn có thể thực hiện "oauth2: scope1 scope2 scope3" với khoảng trắng phân định từng phạm vi. – Yuntao

+0

Xin cảm ơn! nó giúp tôi nhận mã thông báo truy cập – ihrupin

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