繁体   English   中英

使用iOS应用中的服务帐户上传到Google云端存储

[英]Upload to Google Cloud Storage using service account from iOS app

所以我一直在努力将音频/视频文件从iOS应用程序上传到Google Cloud Server。 我希望用户在上传之前无需登录他们的Google帐户。 目前,我的工作解决方案是使服务器上的存储桶“打开”,这基本上可供互联网上的每个人读取/写入存储桶。 我在iOS上将API密钥设置为我的GTLServiceStorage对象:

_serviceStorage.additionalHTTPHeaders = HTTP_HEADERS;
_serviceStorage.APIKey = kCloudBackendAPIKey;

这样,应用程序内的用户应该能够无需登录即可上传。

现在,我希望存储桶是私有的,因此只有授权应用程序的用户才能访问它。

在Android上,我可以使用我从服务器生成的证书来完成它,并通过Google文档页面中的示例将其实现到Android项目文件。 (使用服务帐户ID和PKCS12文件)。 Android上设置凭证的代码如下:

KeyStore keystore = KeyStore.getInstance("PKCS12");
keystore.load(getResources().openRawResource(R.raw.secret), MY_PASSWD.toCharArray());

PrivateKey key = (PrivateKey) keystore.getKey("privatekey", MY_PASSWD.toCharArray());

GoogleCredential credential = new GoogleCredential.Builder()
.setTransport(httpTransport)
.setJsonFactory(jsonFactory)
.setServiceAccountId(SERVICE_ACCOUNT_ID)
.setServiceAccountScopes(scopes)
.setServiceAccountPrivateKey(key)
.build();

storage = new Storage.Builder(httpTransport, jsonFactory, credential)
          .setApplicationName(APP_NAME).build();

// --- continue upload using storage

但是,现在我似乎无法找到一种方法在我的iOS应用程序中实现相同的机制。 有什么办法可以使用谷歌服务帐号来上传iOS应用程序中的文件,这样用户就不必先登录他们的goolge帐户了吗?

将您的私钥保存在应用程序中对于生产来说是不安全的,并且不是正确的方法。 此外,您不能使用与IOS相同的技巧。

解决方案是创建公共API密钥( https://console.developers.google.com - >项目 - >凭证 - >创建新密钥(在公共API访问下) - > Android / IOS密钥。

这应该足够安全,因为密钥可能与sha-1和Android应用程序的名称相关联。 我应该注意到,虽然限制这一点对我来说还没有用,所以在同一时间我把场留空了,这使得它“允许任何应用程序” - 当我发现如何正确地做这件事时,我会更新这个答案。

这是我在android中做到这一点的方式:

HttpTransport httpTransport = new NetHttpTransport();
JsonFactory jsonFactory = AndroidJsonFactory.getDefaultInstance();

mStorage = new Storage.Builder(httpTransport, jsonFactory, null)
            .setApplicationName(PROJECT_ID)
            .build();
...
...
mStorage.objects()
                .get(BUCKET_NAME, fileName)
                .setKey(API_KEY)
                .setAlt("media")
                .executeAndDownloadTo(stream);

如果您有任何机会了解如何将使用限制在单个应用程序中,我也很乐意听到答案:)

祝好运

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM