2014-04-29 62 views
5

因此,我一直在尝试将iOS应用中的音频/视频文件上传到Google Cloud Server。 我希望用户在上传之前不必登录到他们的Google帐户。 目前,我的工作解决方案是让服务器上的存储桶“打开”,基本上每个人都可以在互联网上使用 来读取/写入存储桶。 我将在iOS API密钥我GTLServiceStorage对象:使用iOS应用服务帐户上传到Google Cloud Storage

_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应用。有什么方法可以使用谷歌服务帐户ID在iOS应用程序中上传文件,这样用户不必首先登录到他们的goolge帐户?

+0

@adipurnama嗨,你找到了解决这个问题呢?我有同样的问题。 –

+0

adipurnama,cuGoku>您的Android Mobile App中是否包含私钥文件(.p12)文件和密码?如果是,那是安全的吗? – Jasper

+0

任何解决方案?谢谢... –

回答

1

保持您的私钥在应用程序中不安全的生产,并不是正确的方式来做到这一点。 另外,你不能在IOS中使用相同的技巧。

的解决方案是创建一个公共的API密钥(https://console.developers.google.com - >项目 - >凭证 - >创建新密钥(下公共API访问) - >安卓/ IOS键

这应该是足够安全的,因为潜在的关键是绑定到你的Android应用程序的sha-1和名称 我应该注意,尽管限制这个功能对我还没有奏效,所以同时我将这个字段留空以使它“允许任何应用程序” - 我会在更新这个答案,当我找到如何正确地做到这一点。

这里是我如何做到这一点在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); 

如果你任何机会找出如何限制使用一个单一的应用程序,我很想听到的答案,以及:)

好运

+0

嗨,你有没有找到一种方法来添加SHA1和包来限制访问单个Android应用?我总是“需要登录”作为错误。 – CeccoCQ

+0

还不幸。目前它仍在使用“允许的所有应用程序”。 很想听听你是否找到解决方案 – maxandron

+0

没有解决方案。目前,我正在使用带有服务帐户类型的p12文件。但我想知道我可以将p12文件隐藏到Android应用程序中......难以置信,Android客户端没有任何解决方案......您有什么想法吗? – CeccoCQ

相关问题