0

Android デバイスで Java のアクセス トークンを取得しようとしています。

最初に、 Google API Consoleでインストール済みアプリケーション (Android) のクライアント ID を作成し、アクセス トークンが要求されるパッケージとSHA1 フィンガープリントを設定しました。

OAuth2ForDevicesで読んだように、アクセス トークンを取得するには、最初に User コードを取得する必要があります。そこで、次のようにAqueryを使用して client_id とスコープを指定して POST リクエストを送信しようとしました。

AQuery aq = new AQuery(activity);
         aq.ajax("https://accounts.google.com/o/oauth2/device/code?" +
                "scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.email+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.profile" +
                "client_id=xxxxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.apps.googleusercontent.com",
            JSONObject.class,new AjaxCallback<JSONObject>(){

           @Override
           public void callback(String url, JSONObject traffic_flow, AjaxStatus status) {

               publishProgress(traffic_flow.toString());

           }
    });

問題は、それJSONObject traffic_flowが常に null であることです。私もこれを使用して取得しようとしました(ただし、これが正しい方法であるとは思いません):

authToken = GoogleAuthUtil.getToken(activity, mEmail,  "audience:server:client_id:xxxxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.apps.googleusercontent.com");

ここで、mEmail は Android デバイスからのメールですが、GoogleAuthException「Unknown」と表示されました。ユーザーコードを正しく取得する方法を教えてください。

編集:

これを使用して、最終的に認証トークンを取得できました。

String scope = "audience:server:client_id:xxxxxxxxxxxx.apps.googleusercontent.com";
String token = GoogleAuthUtil.getToken(activity, client.getAccountName(), scope);

ここで、scope はGoogle API コンソールで生成された Web アプリケーションのクライアント ID です(その後、トークンを Web サイトに送信して検証しています)。

テストアプリケーションでトークンを取得しましたが、問題は、新しいアプリケーションにコードを含めたいときに、その醜い例外が再び発生することです:

com.google.android.gms.auth.GoogleAuthException: Unknown at com.google.android.gms.auth.GoogleAuthUtil.getToken(Unknown Source)

これらのアプリケーションのすべてのクライアント ID は同じプロジェクトにあり、マニフェストの権限は OK である必要があります ( GET_ACCOUNTS,USE_CREDENTIALS,AUTHENTICATE_ACCOUNTS,INTERNET,ACCESS_NETWORK_STATE)。新しいアプリケーションで行った唯一の変更は、PlusClient を作成するときにスコープを設定することです。それがないと動作しないためです (テスト アプリケーションでそれがないと動作する理由がわかりません)。

mPlusClient = new PlusClient.Builder(this, this, this)
            .setVisibleActivities("http://schemas.google.com/AddActivity")
            .setScopes(Scopes.PLUS_LOGIN, Scopes.PLUS_PROFILE)
            .build()

私は何が欠けていますか?

4

2 に答える 2