2

Google Play サービスで認証すると、すべてが機能します。

String token = GoogleAuthUtil.getToken(mActivity, mEmail, "oauth2:" + DriveScopes.Drive);

トークンを使用して、ドライブ インスタンスを作成し、Google ドライブにアクセスできるようになりました。しかし、これは Android 2.2 以降でのみサポートされていることに気付きました。Android 2.1 をサポートする必要があります。

このコードを使用してトークンを取得しようとしました:

AccountManager am = AccountManager.get(this);
Bundle options = new Bundle();
am.getAuthToken (
        account,
        "oauth2:" + DriveScopes.Drive,
        options,
        this,
        new OnTokenAcquired(this),
        null);

このコードを使用するとトークンを取得できますが、それを使用してドライブ インスタンスを作成すると、Google ドライブにアクセスできません。たとえば、次のコードを実行すると:

drive.files().list().setQ(trashed=false and title="'someTitle'").execute();

次のエラーが表示されます。

com.google.api.client.googleapis.json.GoogleJsonResponseException: 401 Unauthorized
{
    "code" : 401,
    "errors" : [ {
        "domain" : "global",
        "location" : "Authorization",
        "locationType" : "header",
        "message" : "Invalid Credentials",
        "reason" : "authError"
    } ],
    "message" : "Invalid Credentials"
}

これは、私のドライブ インスタンスを作成する方法です。

    HttpTransport httpTransport = new NetHttpTransport();
    JacksonFactory jsonFactory = new JacksonFactory();
    Drive.Builder b = new Drive.Builder(httpTransport, jsonFactory, null);
    b.setJsonHttpRequestInitializer(new JsonHttpRequestInitializer() {
        public void initialize(JsonHttpRequest request) throws IOException {
            DriveRequest driveRequest = (DriveRequest) request;
            driveRequest.setPrettyPrint(true);
            driveRequest.setKey(CLIENT_ID);
            driveRequest.setOauthToken(token);
            driveRequest.setEnableGZipContent(true);
        }
    });

    drive = b.build();
4

2 に答える 2

0

これは正しいようですが、AccountManager OAuth2サポートの問題は、プラットフォームのバージョン(Googleサービスライブラリなど)に依存することです。一部のデバイスでは動作する場合がありますが、ライブラリがわずかに異なる他のデバイスでは動作しない場合があります。2.1で一貫して機能することを確認する唯一の方法は、WebViewを使用してトークンを取得することです。一部のデバイスでAccountManagerが壊れているかバグがある場合、実際には何もできません。

于 2012-10-17T02:31:14.253 に答える
0

わかりましたので、解決しました。問題は、実際には間違ったクライアント ID を使用したことでした。Google Play サービスを使用するときは、Google API コンソールにあるインストール済みアプリケーションのクライアント ID を使用しました。AccountManager を使用すると、この ID が機能しませんでした。代わりに、Simple API Access の API キーを使用する必要がありました。

編集

これは完全に正しくないことがわかりました。使用するクライアント ID は、デバイスによって異なるようです。

于 2012-10-18T09:54:58.073 に答える