2013-04-23 16 views
12

Tôi gặp sự cố khi nhận userid cho phương thức điểm cuối đám mây. Tôi đã sử dụng xác thực oauth2 trong ứng dụng khách Android của mình và đã chuyển thông tin đăng nhập vào dịch vụ của mình. Dưới đây là tương tự như những gì phương pháp của tôi trông giống như (đơn giản hóa để làm cho nó rõ ràng hơn).Chức năng User.getUserId() trong Cloud endpoint api trả về null cho đối tượng người dùng không phải là rỗng

Tôi lưu ý rằng issue 8848 cho python có vẻ rất giống với vấn đề này.

Có phải vấn đề tương tự cũng gặp phải vấn đề trong java api không? Phương pháp

public SuccessCode doSomething(WireFormat wire, User user){ 
    log.info("User id: "+user.getUserId()); 
    log.info("Federated identity: "+user.getFederatedIdentity()); 
    log.info("Email address: "+user.getEmail()); 
} 

sẽ hiển thị null cho Federated Identity và userId mặc dù thông tin trong ứng dụng android đã xác thực OAuth2 thực hiện. Địa chỉ email hiển thị chính xác trong nhật ký. Đây là tất cả trên một ứng dụng triển khai btw.

Bất kỳ ai có bất kỳ đề xuất nào khác về những gì là sai? Bất kỳ cách giải quyết nào được biết cho vấn đề này? Tôi đã làm theo phương pháp được đề xuất trong https://developers.google.com/appengine/docs/java/endpoints/consume_android#making-authenticated-calls để thiết lập ứng dụng khách Android của tôi.

Trả lời

5

Bạn đúng là vấn đề 8848 là nguyên nhân tương tự. Vấn đề cơ bản là ngôn ngữ bất khả tri và ảnh hưởng đến cả hai thời gian. Tại thời điểm này, bạn không nên mong đợi trường ID người dùng được điền trong đối tượng User được chuyển qua trong đối số phương thức trong Điểm cuối.

Giải pháp tối ưu siêu tối ưu là duy trì đối tượng User đến kho dữ liệu và đọc lại. Đối tượng đọc lại sẽ có ID người dùng được bao gồm.

+0

Cảm ơn. Tôi sẽ thử cách giải quyết khác. Ít nhất tôi biết và có thể chờ đợi một bugfix ngay bây giờ. – user2072160

+0

Dường như điều này vẫn chưa được khắc phục. Tôi có một điểm cuối phụ trợ đám mây trả về null bất cứ khi nào tôi gọi getUserId. Mặc dù, có cần sử dụng id người dùng không? Email cũng là duy nhất và tôi không nghĩ rằng có thể cho người dùng thay đổi địa chỉ email của họ. – sthomps

+0

Bất kỳ sự tin tưởng nào khi làm việc này? Đang cố gắng quyết định triển khai công việc tồi tệ này xung quanh hoặc sử dụng email làm khóa. – Patrick

-1

Tôi đã làm theo cùng một tham chiếu tài liệu trong câu hỏi và có cùng một vấn đề chính xác.

Cuối cùng nhận được các thiết bị đầu cuối làm việc với OAuth2 bằng cách làm như sau:

Có một bản cập nhật cho dịch vụ Google Play mà tôi cập nhật để; bây giờ trên phiên bản 15 (Android SDK).

Tài liệu điểm cuối đã được cập nhật để cho biết bạn nên bật API Google Plus cho ứng dụng của mình, ngay cả khi bạn chỉ sử dụng phạm vi userinfo.email cho điểm cuối của công cụ ứng dụng của mình. Tôi đã làm điều này thông qua Cloud Console.

Ngoài ra, cuối cùng, có một ghi chú mới cho biết OAuth2 không hoạt động từ trình mô phỏng. Tôi đã xác nhận điều này. Tôi vẫn nhận được lỗi người dùng null từ Trình mô phỏng Android, ngay cả khi trỏ đến công cụ ứng dụng sản xuất. Vì vậy, tôi vẫn chỉ có thể kiểm tra điểm cuối từ một thiết bị thực.

Tôi có thể xác nhận rằng tôi cần tất cả ba bước trên.

+0

Bạn có thể vui lòng cung cấp liên kết đến các câu được đề cập không? Tôi đã bắt đầu phát triển ứng dụng bằng điểm cuối nhưng tôi chưa bao giờ thấy bất kỳ điều gì về cách bật API Google+. –

+0

Giải pháp này có vẻ không liên quan đến câu hỏi. Vấn đề được nêu trong phần cuối appengine/cloud endkend. Những gì bạn mô tả là trong mã Android lối vào. – sthomps