2014-04-29 21 views
5

Bu yüzden iOS/iOS uygulamasından ses/video dosyalarını Google Cloud Server'a yüklemeye çalışıyorum. Kullanıcının, yüklemeden önce google hesabına giriş yapmasını istemiyorum. Şu anda, çalışan çözümlerim, sunucunun "açık" olmasını sağlamaktır; bu, Internet'teki herkesin kova okuduğunu/yazmasını sağlayan temel olarak .iOS uygulamasından hizmet hesabını kullanarak Google Cloud Storage'a yükle

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

Bu şekilde, uygulamanın içinden kullanıcı giriş yapmadan yüklemek mümkün olmalıdır: Ben iOS'ta benim GTLServiceStorage nesnesine API anahtarını ayarlayın.

Şimdi, bu paketin özel olmasını istiyorum, böylece yalnızca yetkili uygulamadaki kullanıcı buna erişebilir.

Android'de, Ben sunucudan oluşturduğum sertifikayı kullanarak bunu yapabilir ve Google Dokümantasyon sayfasındaki örnekle Android proje dosyalarına uygulayabilirsiniz. (Hizmet hesabı kimliği & PKCS12 dosyalarını kullanma). kimlik ayarlamak için Android'de kod şu şekildedir: Ancak

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 

, şimdi benim iOS uygulaması içine aynı mekanizmayı uygulamak için bir yol bulmak gibi olamaz için. IOS uygulamasında dosya yüklemek için google hizmet hesabı kimliğini kullanmanın bir yolu var mı? Böylece, önce kullanıcı kendi goolge hesabına giriş yapmak zorunda kalmıyor mu?

+0

Merhaba @adipurnama, bulduğunuz Bu soruna henüz çözüm mü? Aynı problemim var. –

+0

adipurnama, cuGoku> Özel anahtar dosyası (.p12) dosyasını ve Android Mobile Uygulamanızın içindeki şifreyi mi eklediniz? Evet ise, bu güvenli midir? – Jasper

+0

herhangi bir çözüm? teşekkürler ... –

cevap

1

Özel anahtarınızı uygulamada saklamak, üretim için güvenli değildir ve bunu yapmanın doğru yolu değildir. Ayrıca, aynı numarayı IOS ile kullanamazsınız. > Proje - -

çözeltisi (https://console.developers.google.com bir kamu API anahtarı oluşturmaktır> kimlik bilgileri -> kamu api erişimi altında yeni anahtarı (Oluştur) -.> Android/IOS tuşu

Bunun nedeni potansiyel yeterince güvenli olmalı anahtar sha-1'e ve android uygulamanızın ismine bağlıdır. Bunu engellemenin henüz benim için işe yaramadığına dikkat etmeliyim, bu yüzden bu süre içinde alanı boş bıraktığım için "Herhangi bir uygulamaya izin verilir" - Bunu nasıl yapacağımı öğrendiğimde bu cevabı güncelleyeceğim

Android'de bunu nasıl yaptım:

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); 

Bir ihtimal tek bir uygulamaya kullanımını kısıtlamak için öğrenmek olursa ben de cevabını duymak isteriz :)

iyi şanslar

+0

Merhaba, tek bir android uygulamasına erişimi kısıtlamak için SHA1 ve paketi eklemenin bir yolunu buldunuz mu? Her zaman "Giriş Gerekli" hatam oldu. – CeccoCQ

+0

Henüz maalesef değil. şu anda hala "tüm uygulamalar izinli" kullanıyor. – maxandron

+0

Bir çözüm bulursanız benim için bir çözüm yok. Şimdilik, Hizmet Hesabı türünde bir p12 dosyası kullanıyorum. Ama p12 dosyasını bir android uygulamasına saklayabildiğimi merak ediyorum ... Android istemcisi için herhangi bir çözüm bulunmadığı inanılmaz ... herhangi bir fikrin var mı? – CeccoCQ

İlgili konular