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()
私は何が欠けていますか?