5

Tôi đang cố gắng để có được một điểm cuối google để work.I tạo ra một dịch vụ điểm cuối và đã có thể kiểm tra rằng nó làm việc tốt thông qua Google API khai thác. Sau đó tôi đã tạo ứng dụng khách Android và thử gọi dịch vụ điểm cuối của tôi. Tôi thấy lỗi này trong nhật ký,Lỗi GLS: INVALID_AUDIENCE trong google cloud endpoints

04-05 08:48:20.547: I/GLSUser(13505): GLS error: INVALID_AUDIENCE [email protected] audience:server:client_id:334082396285-hfn3t2g5pg0gv8fshf22kaadq9fs23e2.apps.googleusercontent.com 

Đây là mã java android của tôi để xây dựng tức là chứng chỉ dùng để truy cập dịch vụ của tôi,

AUDIENCE = "server:client_id:334082396285-hfn3t2g5pg0gv8fshf22kaadq9fs23e2.apps.googleusercontent.com"; 
credential = GoogleAccountCredential.usingAudience(this, AUDIENCE); 
      setAccountName(settings.getString(PREF_ACCOUNT_NAME, null)); 

Dường như có một số không phù hợp trong client_id. Đây là những gì tôi đã làm,

1) Đã tạo 2 client_ids trong bảng điều khiển API Google trong một dự án API, a) WEB_CLIENT_ID = Tôi đã tạo client_id cho các ứng dụng web với URI chuyển hướng = None & Nguồn gốc JavaScript = Không. b) ANDROID_CLIENT_ID = Đã tạo ứng dụng khách cho ứng dụng android với tên gói & dấu vân tay chứng chỉ sha1.

2) Sau đó, sử dụng các dịch vụ tại điểm cuối của tôi trong python,

@endpoints.api(name='devices', 
       version='v1', 
       description='Service to register devices', 
       allowed_client_ids=[ANDROID_CLIENT_ID,WEB_CLIENT_ID,endpoints.API_EXPLORER_CLIENT_ID], 
       audiences = [WEB_CLIENT_ID]) 

Hoàn log

04-05 08:48:20.397: D/overlay(159): Set pipe=RGB1 dpy=0; Set pipe=VG0 dpy=0; 
04-05 08:48:20.547: W/GLSUser(13505): Status from wire: INVALID_AUDIENCE status: null 
04-05 08:48:20.547: W/GLSUser(13505): Status from wire: INVALID_AUDIENCE status: null 
04-05 08:48:20.547: I/GLSUser(13505): GLS error: INVALID_AUDIENCE [email protected] audience:server:client_id:334082396285-hfn3t2g5pg0gv8fshf22kaadq9fs23e2.apps.googleusercontent.com 
04-05 08:48:20.547: W/GLSUser(13505): Status from wire: Unknown status: UNKNOWN 
04-05 08:48:20.547: W/System.err(31908): com.google.api.client.googleapis.extensions.android.gms.auth.GoogleAuthIOException 
04-05 08:48:20.547: W/System.err(31908): at com.google.api.client.googleapis.extensions.android.gms.auth.GoogleAccountCredential$RequestHandler.intercept(GoogleAccountCredential.java:224) 
04-05 08:48:20.547: W/System.err(31908): at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:836) 
04-05 08:48:20.547: W/System.err(31908): at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:412) 
04-05 08:48:20.557: W/System.err(31908): at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:345) 
04-05 08:48:20.557: W/System.err(31908): at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.execute(AbstractGoogleClientRequest.java:463) 
04-05 08:48:20.557: W/System.err(31908): at com.package.appname.SetupActivity$SendResultToServerTask.doInBackground(SetupActivity.java:174) 
04-05 08:48:20.557: W/System.err(31908): at com.package.appname.SetupActivity$SendResultToServerTask.doInBackground(SetupActivity.java:1) 
04-05 08:48:20.557: W/System.err(31908): at android.os.AsyncTask$2.call(AsyncTask.java:287) 
04-05 08:48:20.557: W/System.err(31908): at java.util.concurrent.FutureTask.run(FutureTask.java:234) 
04-05 08:48:20.557: W/System.err(31908): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230) 
04-05 08:48:20.557: W/System.err(31908): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080) 
04-05 08:48:20.557: W/System.err(31908): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573) 
04-05 08:48:20.557: W/System.err(31908): at java.lang.Thread.run(Thread.java:856) 
04-05 08:48:20.557: W/System.err(31908): Caused by: com.google.android.gms.auth.GoogleAuthException: Unknown 
04-05 08:48:20.557: W/System.err(31908): at com.google.android.gms.auth.GoogleAuthUtil.getToken(Unknown Source) 
04-05 08:48:20.557: W/System.err(31908): at com.google.android.gms.auth.GoogleAuthUtil.getToken(Unknown Source) 

đã thấy chủ đề tương tự và họ không giúp đỡ, Google Api and android Oauth INVALID_AUDIENCE error

+0

tái sinh một client_id ứng dụng web mới trong giao diện điều khiển API của tôi. Được sử dụng trong khán giả trong chương trình phụ trợ của công cụ ứng dụng và cũng trong phạm vi đối tượng Android. Vẫn không có may mắn. – plspl

+0

Đã đổi tên gói ứng dụng Android của tôi và tạo id ứng dụng khách Android mới. Vẫn gặp lỗi tương tự. – plspl

+0

Để loại bỏ các nguồn lỗi rõ ràng, bạn có đang chạy Điểm cuối của mình trong sản xuất và thử nghiệm trên thiết bị Android thực (không phải trình mô phỏng) không? –

Trả lời

4

Phew! Cuối cùng đã làm cho nó hoạt động. Không chắc chắn những gì đã sai. Đã thử những điều này, xóa tệp kho khóa gỡ lỗi và tạo lại nó. Đã sao chép dấu vân tay sha1 vào giao diện điều khiển api. Sau đó làm theo hướng dẫn từ đây - http://android-developers.blogspot.com/2013/01/verifying-back-end-calls-from-android.html để đảm bảo rằng ít nhất tôi có thể nhận được mã thông báo trên thiết bị Android. Sau đó, tôi đã thay đổi để sử dụng các lớp máy khách được tạo điểm cuối. Bây giờ ứng dụng của tôi có thể nói chuyện với chương trình phụ trợ của công cụ ứng dụng thông qua dịch vụ điểm cuối.

6

Tôi giải quyết vấn đề này đặt tên cho dự án trong bảng điều khiển google api.

Trong mới giao diện điều khiển UI API trong [API & auth] -> [Chấp thuận màn hình]

2

Vấn đề này xảy ra đối với tôi khi tôi tạo ra một môi trường phát triển mới trên một hệ thống khác. Tôi đã cài đặt Android Studio trên hệ thống mới và sao chép mã. Mã tương tự hoạt động trên hệ thống cũ của tôi không hoạt động trên hệ thống mới, với INVALID_AUDIENCE. Sau khi thử nhiều thứ, những gì cuối cùng đã làm việc là sao chép tệp debug.keystore từ hệ thống cũ của tôi sang hệ thống mới. Trên Windows, tệp nằm trong% USERPROFILE% .android. Điều này có ý nghĩa vì debug.keystore được tạo bởi Android Studio khi cài đặt riêng cho máy tính đó. Các debug.keystore có một ngày hết hạn (365 ngày tôi nghe) vì vậy đây cũng có thể là nguyên nhân. Vì vậy, giải pháp thực sự cho tôi là tạo lại tệp debug.keystore trên hệ thống mới. Xóa tệp debug.keystore và khởi động lại Android Studio sẽ tạo lại tệp. Sau đó chạy keytool để lấy dấu vân tay chứng chỉ SHA1. Sau đó, truy cập http://console.developers.google.com để tạo ID ứng dụng khách mới bằng dấu vân tay.

3

Bạn sẽ gặp phải lỗi này nếu ANDROID_CLIENT_ID mà bạn chú thích @ Api # clientIds có tên gói Android khác với tên gói ứng dụng Android.

Ví dụ

@Api(
    name = "yourFirstService", 
    version = "v1", 
    namespace = @ApiNamespace(ownerDomain = "myorg.org", ownerName = "My Org", packagePath = "firstservice"), 
    scopes = {Constant.API_EMAIL_SCOPE}, 
    clientIds = {Constants.ANDROID_CLIENT_ID, Constant.API_EXPLORER_CLIENT_ID}, 
    audiences = {Constants.ANDROID_AUDIENCE} 
) 
public class YourFirstAPI { 
    ... 
} 

Các địa điểm ưa thích là thuộc tính ClientId. ANDROID_CLIENT_ID ở đó cần phải

  1. Đối sánh khách hàngTrong ứng dụng Cloud Console->APIS & Auth->Credentials->Client ID for Android của bạn.
  2. Tên gói của ứng dụng khách đó cần phải giống với ứng dụng Android bạn đang sử dụng làm ứng dụng khách.
+0

bro đã làm u có nghĩa là tôi cần phải thêm tên gói ở đâu đó trong @APi (..). tên gói ứng dụng giống với tên gói ứng dụng Android của google console, YET tôi nhận được cùng một trải nghiệm, Pls có thể giúp bạn không? – Tanvir

+0

Giá trị của Constants.ANDROID_CLIENT_ID cần khớp với giá trị của tên gói ứng dụng Android của bạn (trong AndroidManifest). Nó cũng cần phải khớp với clientId trong Cloud Console. – William

+0

Do u có nghĩa là tên gói được yêu cầu cho wen tạo id ứng dụng trong bảng điều khiển google? Tôi nói với tôi; Tên đóng gói phải giống với tên gói ứng dụng của tôi trong tệp kê khai? – Tanvir

2

Đã xảy ra với một trong nhóm của tôi mặc dù nó hoạt động tốt trên thiết bị của tôi. Hóa ra là do một khác nhau debug.keystore trên cài đặt nhật thực của chúng tôi.

Để giải quyết nó, chúng ta đã sao chép debug.keystore hồ sơ của công ty để ~/.android/ (đây là dir trên mac, nó khác nhau trên linux và windows)

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