2016-08-10 1 views
19

Nach diesem Beitrag: http://android-developers.blogspot.com/2016/01/play-games-permissions-are-changing-in.html Ich habe einen einmaligen Gebrauch Autorisierungscode für die Verwendung auf meinen Backend-Server wie folgt erhalten:Warum ist GetServerAuthCodeResult veraltet? Wie kann ich in einer installierten Anwendung etwas Ähnliches tun?

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... 

Dies scheint gut zu funktioniert, aber es stellt eine Frage:

1) getGamesServerAuthCode und GetServerAuthCodeResult werden als veraltet markiert. Warum? Sollte ich stattdessen etwas anderes benutzen?

2) Wie würde ich in einer nicht von Android installierten Java-Anwendung etwas Ähnliches tun? Ich bin in der Lage, ein Token auf der Client-Anwendung zu erhalten, aber ich muss auch einen einzelnen Verwendungscode erhalten, um wie oben an meinen Backend-Server zu übergeben. Ich kann keine gleichwertige Funktion finden, um einen Server Auth Code zu erhalten. (mit com.google.api.client.extensions.java6.auth.oauth2)

Ich versuche im Grunde, diesen Fluss zu folgen: https://developers.google.com/games/services/web/serverlogin aber in Java, nicht Javascript. Ich versuche dies in einer Android App und einer Desktop Java App zu tun.

+1

Programmelement kommentierte @deprecated ist eine, die Programmierer verwenden, entmutigt werden, in der Regel, weil es gefährlich ist, oder weil eine bessere Alternative gibt. Compiler warnen, wenn ein veraltetes Programmelement in nicht veraltetem Code verwendet oder überschrieben wird. Es bedeutet nicht, dass es weggeht, gelöscht oder auf irgendeine Weise entfernt wird, es bedeutet, dass es eine BESSERE Vorgehensweise gibt. Keine Panik, bleib ruhig und mach weiter, O) –

+0

Das verstehe ich. Ich bin auf der Suche nach der "richtigen" Möglichkeit, Dinge in Android zu tun, seit vor kurzem (Januar) Google schlug vor, diese Funktion zu verwenden. Ich habe das zusätzliche Problem einer vergleichbaren Funktion, die in der Nicht-Android-Version der Java API nicht existiert. – M1LKYW4Y

+1

@ M1LKYW4Y Haben Sie in (1) den "richtigen" Weg gefunden, das zu tun, was Sie wollten? Ich bin genau an der gleichen Stelle in meiner Entwicklung. Google schien diesen Ansatz vor relativ kurzer Zeit zu empfehlen, aber der Ansatz scheint bereits veraltet zu sein! – Antinous

Antwort

0

Es gibt endlich eine richtige Antwort auf Teil 1) dieser Frage! In den Versionshinweisen von gms 10.2.0 https://developers.google.com/android/guides/releases#february_2017_-_v102 wird die neue Methode zum Abrufen eines Servercodes beschrieben. Ein gutes Beispiel dafür ist hier:
Am Ende habe ich Googles baseGameUtils aktualisiert, um dem obigen Beispiel zu folgen.

Immer noch nicht sicher, den richtigen Weg, um dies für Teil 2) der Frage zu tun, im Moment sende ich das Token an den Server, der funktioniert, aber wahrscheinlich unsicher ist.

0

1) Ja, in Android GetServerAuthCodeResult obwohl es immer noch als veraltet markiert ist. Es ist der empfohlene Weg von Google und es scheint, dass sie nur vergessen haben, die Annotation zu entfernen, wenn sie in der Öffentlichkeit veröffentlicht wird.

2) Für Desktop-Anwendungen können Sie den Anweisungen hier folgen: https://developers.google.com/identity/protocols/OAuth2InstalledApp

Grundsätzlich aus Ihrer App öffnen Sie das System-Browser (embedded WebViews abgeraten) und eine https-Anforderung an den https://accounts.google.com/o/oauth2/v2/auth Endpunkt machen. In der Anfrage liefern Sie einen lokalen Umleitungs-URI-Parameter, d. H. http://127.0.0.1:9004 (Sie sollten Ihre Plattform nach der relevanten Loopback-IP abfragen und einen HTTP-Listener an einem zufällig verfügbaren Port starten). Der Autorisierungscode wird an Ihren lokalen HTTP-Listener gesendet, wenn der Benutzer seine Zustimmung erteilt hat, oder einen Fehler wie error=access_denied, wenn der Benutzer die Anfrage abgelehnt hat. Ihre Anwendung muss diesen lokalen Webserver abhören, um die Antwort mit dem Authcode abzurufen. Sie haben auch die Möglichkeit, auf eine Server-URI umzuleiten, die direkt von Ihrer App beansprucht wird, siehe Dokumentation oben. Wenn Ihre App die Autorisierungsantwort erhält, sollte sie für eine optimale Benutzerfreundlichkeit mit einer HTML-Seite antworten, die den Benutzer anweist, den Browser-Tab zu schließen und zu Ihrer App zurückzukehren. Wenn Sie den Games-scope verwenden möchten, stellen Sie sicher, dass Sie den Bereich https://www.googleapis.com/auth/games als Bereich in der Anforderung verwenden (Beispiel unten), mit Zeilenumbrüchen und Leerzeichen zur besseren Lesbarkeit.

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 

Bitte beachten Sie, dass ich denke, Sie müssen eine App von other erstellen, geben Sie und verknüpfen Sie in der Entwicklerkonsole Linked-Play-App von Google, für die localhost-Umleitung zu arbeiten. Verwenden Sie den Typ Web, wenn Sie direkt zum Server-URI umleiten möchten, fügen Sie Ihren Server-URI Authorized redirect URIs im API-Manager unter Abschnitt Credentials hinzu.

Browser Screenshot:

consent picture

+0

Verzeihen Sie meine Vorsicht, aber woher wissen Sie, dass der Code in 1) tatsächlich von Google empfohlen wird und die Abwertung falsch ist? Ist Ihre Quelle der gleiche Artikel, den ich oben verlinkt habe? – M1LKYW4Y

+1

Nun, ich bin nicht sicher, daher die Verwendung von "es scheint", aber es ist, was Clayton Wilkinson (Entwickler Programmingenieur) bei Google sagt: "Der beste Weg, damit umzugehen ist zu ..." und "es wird sei eine normale API ". Und es gab nichts anderes von Google in Bezug auf dieses Problem danach angekündigt. Außerdem ist dies derzeit der einzige Weg, den Authcode auf Android zu holen, ich bezweifle, dass er ihn in naher Zukunft entfernen wird. Das würde viele Spiele außer Kontrolle bringen, abhängig davon, dass diese Anmeldefunktion ihr eigenes Server-Backend ausführt. – jbilander

Verwandte Themen