2

アプリのユーザーが常に認証なしでファイルにアクセスできるように、Google ドライブ サービスに資格情報をハードコーディングするにはどうすればよいですか?

Java SKD を使用して解決策を見つけましたが、これらのライブラリは Android ではうまく機能しません: https://developers.google.com/drive/service-accounts#use_service_accounts_as_application-owned_accounts

同様のタスクの成功した試みの例はありますか?

4

2 に答える 2

3

わかりました、問題の解決策を見つけました。

もちろん、私のアプリは Android のアプリです。ユーザーがログインしたり、資格情報を使用してドライブに接続したりしたくありません。最後に、デフォルトのドライブ Web アプリを使用してファイルを操作できます。

  1. Seps を取得する必要があります:この 例のようにサービス アカウントを作成します。
  2. 秘密鍵API アクセス サイトをダウンロードして、たとえば、配置します。アセットフォルダーにあります。
  3. 次のライブラリをダウンロードしてインポートします。
    • google-api-client-1.13.2-beta.jar
    • google-api-client-android-1.13.2-beta.jar
    • google-api-services-drive-v2-rev60-1.13.2-beta.jar
    • google-http-client-1.13.1-beta.jar
    • google-http-client-android-1.13.1-beta.jar
    • google-http-client-gson-1.13.1-beta.jar
    • google-http-client-jackson2-1.13.1-beta.jar
    • google-oauth-client-1.13.1-beta.jar
    • gson-2.1.jar
    • グアバ-jdk5-13.0.jar
    • jackson-core-2.0.5.jar
    • jsr305-1.3.9.jar
  4. ドライブ サービス ゲッターを実装します。

    public Drive getDriveService() throws GeneralSecurityException, IOException, URISyntaxException {
        HttpTransport httpTransport = new NetHttpTransport();
        JacksonFactory jsonFactory = new JacksonFactory();
        GoogleCredential credential = new GoogleCredential.Builder()
            .setTransport(httpTransport)
            .setJsonFactory(jsonFactory)
            .setServiceAccountId(G_SERVICE_EMAIL)
            .setServiceAccountScopes(DriveScopes.DRIVE)
            .setServiceAccountPrivateKeyFromP12File(PKC_12_FILE)
            .build();
        Drive service = new Drive.Builder(httpTransport, jsonFactory, null)
            .setHttpRequestInitializer(credential)
            .build();
        return service;
    }
    

    G_SERVICE_EMAILはAPI アクセス サイトからのメール アドレスで、PKC_12_FILE以前にダウンロードした秘密鍵です。

  5. サービスがドライブからフォルダーにアクセスできるようにします:ドライブ アプリのフォルダーの共有オプションで、ユーザーにメールを許可します: G_SERVICE_EMAIL読み取り/書き込みアクセス。

    PKC ファイルの統合

    private File getTempPkc12File() throws IOException {
        InputStream pkc12Stream = getAssets().open("this-is-your-unique-hash-privatekey.p12");
        File tempPkc12File = File.createTempFile("temp_pkc12_file", "p12");
        OutputStream tempFileStream = new FileOutputStream(tempPkc12File);
    
        int read = 0;
        byte[] bytes = new byte[1024];
        while ((read = pkc12Stream.read(bytes)) != -1) {
            tempFileStream.write(bytes, 0, read);
        }
        return tempPkc12File;
    }
    
于 2013-03-24T17:47:06.120 に答える
0

あなたはおそらくこれをしたくないでしょう。アクセス トークンがある場合は、いつでも URL パラメーターとしてaccess_token=MY_ACCESS_TOKENリクエスト URL に追加できます。

于 2013-03-24T00:48:38.333 に答える