2016-08-10 8 views
19

この記事に続いて次のように私は私のバックエンドサーバー上で使用するために、単回使用の認証コードを取得しているhttp://android-developers.blogspot.com/2016/01/play-games-permissions-are-changing-in.htmlGetServerAuthCodeResultはなぜ非推奨ですか?インストールされたアプリケーションで同等の機能を実行するにはどうすればよいですか?

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

これは正常に動作しますが、それは問題提示しているようだ:

1)getGamesServerAuthCodeおよびGetServerAuthCodeResultは廃止予定とマークされています。どうして?代わりに何か他のものを使うべきですか?

2)AndroidにインストールされていないJavaアプリケーションであれば、私はどうすれば同等の処理を行うことができますか?私はクライアントアプリケーション上でトークンを取得することができますが、上記のように私のバックエンドサーバーに渡すために単一の使用コードを取得する必要もあります。サーバー認証コードを取得するための同等の機能が見つかりません。 (com.google.api.client.extensions.java6.auth.oauth2を使用して)

私は基本的にこの流れに従います:https://developers.google.com/games/services/web/serverloginしかし、Javaではなく、Javascriptです。私はAndroidアプリとデスクトップJavaアプリでこれをやろうとしています。

+1

プログラム要素の注釈付き@Deprecatedは、より良い代替手段が存在するので、それは危険である、または通常ので、プログラマは使用を勧められています。非難されたプログラム要素が使用されるか、非推奨のコードで上書きされると、コンパイラは警告します。削除されたり、削除されたりすることを意味するものではありません。より良い方法があることを意味します。慌てずに静かにし続けてください; O) –

+0

私はそれを理解しています。私はかなり最近(1月)Googleがこの機能の使用を提案していたので、Androidで物事を行う "正しい"方法を探しています。 Java以外のバージョンのJava APIにはない同等の機能が追加されています。 – M1LKYW4Y

+1

@ M1LKYW4Yあなたは(1)で望んだことをする「正しい」方法を見つけましたか?私は私の開発において全く同じ点にいる。 Googleは比較的最近このアプローチを推奨していたようですが、そのアプローチはすでに廃止されているようです! – Antinous

答えて

0

最後に、この質問のパート1)への適切な答えがあります! gms 10.2.0のリリースノート https://developers.google.com/android/guides/releases#february_2017_-_v102 には、サーバーコードを取得する新しい方法が記載されています。これを行う方法の良い例がここにあります: https://github.com/playgameservices/clientserverskeleton
私は上記の例に従うようにGoogleのbaseGameUtilsを更新しました。

まだわからない私は動作しますが、おそらく安全ではないサーバーにトークンを送信しています現時点では、質問の一部2)のためにこれを行うための適切な方法。

0

1)はい、AndroidではGetServerAuthCodeResultを使用しますが、それでも非推奨となっています。それはGoogleから推奨される方法であり、一般公開する際に廃止予定注釈を削除することを忘れてしまったようです。デスクトップアプリケーションの場合

2)あなたはここで指示に従うことができます。

https://developers.google.com/identity/protocols/OAuth2InstalledAppは、基本的にはあなたのアプリからあなたがシステムブラウザ(組み込みwebviewsが落胆している)を開き、https://accounts.google.com/o/oauth2/v2/authエンドポイントへのHTTPS要求を行います。リクエストでは、ローカルのリダイレクトURIパラメータ、つまりhttp://127.0.0.1:9004を提供します(プラットフォームに関連するループバックIPを問い合わせ、ランダムな利用可能なポートでHTTPリスナーを開始する必要があります)。承認コードは、ユーザが同意した場合はローカルHTTPリスナに送信され、ユーザが要求を拒否した場合はerror=access_deniedなどのエラーが送信されます。 authcodeを使用して応答を取得するには、アプリケーションがこのローカルWebサーバーでリッスンしている必要があります。また、アプリケーションから直接要求されたサーバーURIにリダイレクトするオプションもあります(上記リンクのドキュメントを参照)。あなたのアプリケーションが許可レスポンスを受け取ったときは、使い勝手を良くするためにHTMLページで応答し、ブラウザタブを閉じてアプリに戻るように指示する必要があります。あなたがゲームのスコープをしたい場合にも、読みやすくするために改行とスペースで、以下の例では、あなたがリクエストにスコープとしてhttps://www.googleapis.com/auth/gamesを使用していることを確認してください。

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 

私はあなたがローカルホストのリダイレクトが機能するには、デベロッパーコンソールリンクされたGoogle Playアプリで、タイプotherのアプリを作成してリンクする必要がありますだと思いますのでご注意ください。あなたは、直接サーバーURIにリダイレクトセクションCredentials下のAPI ManagerでAuthorized redirect URIsにサーバーURIを追加することを計画している場合タイプWebを使用してください。

ブラウザのスクリーンショット:

consent picture

+0

私の慎重さを許してください。しかし、1)のコードを実際にGoogleが推奨していますが、非推奨は間違っていますか?あなたのソースは、トップにリンクした同じ記事ですか? – M1LKYW4Y

+1

さて、私は確信していないので、 "それは思われる"が、それはGoogleのClayton Wilkinson(開発者プログラムエンジニア)が言っていることです: "これを処理する最善の方法は..."と "それは通常のAPIになります "。その後、この問題に関してgoogleから発表されたことはありません。また、現在のところAndroidでauthcodeを取得するにはこれが唯一の方法ですが、すぐに削除することはできません。それは、独自のサーバーバックエンドを実行しているこのサインイン機能に応じて、多くのゲームをそこから外すことになります。 – jbilander

関連する問題