2016-08-10 17 views
19

Tiếp theo bài này: http://android-developers.blogspot.com/2016/01/play-games-permissions-are-changing-in.html tôi đã thu được một mã số sử dụng uỷ quyền đơn để sử dụng trên máy chủ backend của tôi như sau:Tại sao GetServerAuthCodeResult không được chấp nhận? Làm thế nào tôi có thể làm một cái gì đó tương đương trong một ứng dụng được cài đặt?

import com.google.android.gms.games.Games;  
//later 
Games.GetServerAuthCodeResult result = Games.getGamesServerAuthCode(gameHelper.getApiClient(), server_client_id).await(); 
if (result.getStatus().isSuccess()) { 
    String authCode = result.getCode(); 
    // Send code to server... 

Điều này có vẻ hoạt động tốt, nhưng nó thể hiện một câu hỏi:

1) getGamesServerAuthCode và GetServerAuthCodeResult được đánh dấu là không dùng nữa. Tại sao? Tôi có nên sử dụng cái gì khác thay thế không?

2) Làm cách nào để thực hiện điều gì đó tương đương trong ứng dụng Java không được cài đặt Android? Tôi có thể lấy mã thông báo trên ứng dụng khách, nhưng tôi cũng cần lấy một mã sử dụng duy nhất để chuyển tới máy chủ phụ trợ của tôi như trên. Tôi không thể tìm thấy một hàm tương đương để nhận Mã xác thực máy chủ. (bằng cách sử dụng com.google.api.client.extensions.java6.auth.oauth2)

Tôi về cơ bản đang cố gắng tuân theo luồng này: https://developers.google.com/games/services/web/serverlogin nhưng trong Java, KHÔNG Javascript. Tôi đang cố gắng thực hiện điều này trong ứng dụng Android và ứng dụng Java dành cho máy tính để bàn.

+1

Một chương trình chú thích @Deprecated là một trong đó các lập trình viên không được khuyến khích sử dụng, điển hình là vì nó là nguy hiểm, hoặc vì một sự thay thế tốt hơn tồn tại. Trình biên dịch cảnh báo khi phần tử chương trình không được sử dụng được sử dụng hoặc ghi đè trong mã không được dùng nữa. Nó không có nghĩa là nó sẽ biến mất, bị xóa hoặc xóa bỏ, điều đó có nghĩa là có một cách làm tốt hơn. Đừng hoảng sợ, hãy bình tĩnh và tiếp tục; O) –

+0

Tôi hiểu điều đó. Tôi đang tìm cách "đúng" để làm những việc trong Android, kể từ gần đây (tháng 1) google đã gợi ý sử dụng chức năng này. Tôi có thêm vấn đề về một hàm có thể so sánh không tồn tại trong phiên bản Java không phải của Android. – M1LKYW4Y

+1

@ M1LKYW4Y Bạn có thấy cách "đúng" để làm những gì bạn muốn trong (1) không? Tôi đang ở cùng một điểm trong sự phát triển của tôi. Google dường như đề xuất phương pháp này tương đối gần đây, nhưng cách tiếp cận dường như không được chấp nhận! – Antinous

Trả lời

0

Cuối cùng cũng có câu trả lời đúng cho phần 1) của câu hỏi này! Trong ghi chú phát hành của gms 10.2.0 https://developers.google.com/android/guides/releases#february_2017_-_v102 phương pháp mới để lấy mã máy chủ được mô tả. Một ví dụ tốt về cách thực hiện điều này được cung cấp tại đây: https://github.com/playgameservices/clientserverskeleton
Tôi đã cập nhật cơ sở của GoogleGameUtils để làm theo ví dụ ở trên.

Vẫn không chắc chắn cách thích hợp để thực hiện việc này cho phần 2) của câu hỏi, tại thời điểm tôi gửi mã thông báo đến máy chủ hoạt động nhưng có thể không an toàn.

0

1) Có, trong Android sử dụng GetServerAuthCodeResult mặc dù nó vẫn được đánh dấu là không dùng nữa. Đó là cách được đề xuất từ ​​Google và có vẻ như họ chỉ quên xóa chú thích không dùng nữa khi phát hành ra công chúng.

2) Đối với các ứng dụng máy tính để bàn, bạn có thể làm theo các hướng dẫn tại đây: https://developers.google.com/identity/protocols/OAuth2InstalledApp

Về cơ bản từ ứng dụng của bạn, bạn mở trình duyệt hệ thống (WebViews nhúng không được khuyến khích) và thực hiện một yêu cầu https đến https://accounts.google.com/o/oauth2/v2/auth endpoint. Trong yêu cầu bạn cung cấp thông số URI chuyển hướng cục bộ tức là http://127.0.0.1:9004 (bạn nên truy vấn nền tảng của mình cho IP vòng lặp liên quan và bắt đầu trình nghe HTTP trên một cổng khả dụng ngẫu nhiên). Mã ủy quyền sẽ được gửi tới người nghe HTTP cục bộ của bạn khi người dùng đã đồng ý hoặc có lỗi như error=access_denied nếu người dùng từ chối yêu cầu. Ứng dụng của bạn phải đang nghe trên máy chủ web cục bộ này để truy xuất phản hồi bằng mã xác thực. Bạn cũng có tùy chọn chuyển hướng đến URI máy chủ được xác nhận quyền sở hữu trực tiếp bởi ứng dụng của bạn, xem tài liệu trên liên kết ở trên. Khi ứng dụng của bạn nhận được phản hồi ủy quyền, để có khả năng sử dụng tốt nhất, ứng dụng sẽ phản hồi bằng trang HTML, hướng dẫn người dùng đóng tab trình duyệt và quay lại ứng dụng của bạn. Ngoài ra, nếu bạn muốn Phạm vi trò chơi đảm bảo bạn đang sử dụng https://www.googleapis.com/auth/games làm phạm vi trong yêu cầu, ví dụ bên dưới, có ngắt dòng và khoảng trống để dễ đọc.

https://accounts.google.com/o/oauth2/v2/auth? 
    scope=https://www.googleapis.com/auth/games& 
    redirect_uri=http://127.0.0.1:9004& 
    response_type=code& 
    client_id=812741506391-h38jh0j4fv0ce1krdkiq0hfvt6n5amrf.apps.googleusercontent.com 

Xin lưu ý rằng tôi nghĩ rằng bạn sẽ phải tạo và liên kết ứng dụng của loại other, trong Google Play Developer Console liên kết ứng dụng, cho chuyển hướng localhost để làm việc. Sử dụng loại Web nếu bạn định chuyển hướng trực tiếp đến URI của máy chủ, thêm URI máy chủ của bạn vào Authorized redirect URIs trong Trình quản lý API theo phần Credentials.

Trình duyệt ảnh chụp màn hình: yếu tố

consent picture

+0

Tha thứ sự thận trọng của tôi, nhưng làm thế nào để bạn biết mã trong 1) là trong thực tế được đề nghị bởi google và sự phản đối không chính xác? Là nguồn của bạn cùng một bài viết tôi liên kết ở đầu trang? – M1LKYW4Y

+1

Vâng, tôi không chắc chắn, do đó việc sử dụng "nó có vẻ", nhưng đó là những gì Clayton Wilkinson (kỹ sư lập trình viên phát triển) tại Google nói: "Cách tốt nhất để xử lý việc này là ..." và "nó sẽ là một API bình thường ". Và không có bất cứ điều gì khác được công bố từ google về vấn đề này sau đó. Ngoài ra, đây là cách duy nhất để tìm nạp mã xác thực trên Android, tôi nghi ngờ họ sẽ xóa nó ngay sau đó. Điều đó sẽ phá vỡ rất nhiều trò chơi ra khỏi đó tùy thuộc vào tính năng đăng nhập này chạy phụ trợ máy chủ của riêng họ. – jbilander

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