2014-04-29 56 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

相關問題