2014-04-29 3 views
5

J'ai donc essayé de télécharger des fichiers audio/vidéo depuis l'application iOS vers Google Cloud Server. Je souhaite que l'utilisateur ne doive pas se connecter à son compte Google avant de le télécharger. Actuellement, mes solutions de travail est de rendre le seau sur le serveur "ouvert", qui est essentiellement disponible pour chaque personne sur Internet pour lire/écrire le seau. Je mis clé API à mon objet GTLServiceStorage sur iOS:Télécharger sur Google Cloud Storage à l'aide du compte de service de l'application iOS

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

De cette façon, l'utilisateur à partir de l'application devrait être en mesure de télécharger sans connexion.

Maintenant, je souhaite que le compartiment soit privé afin que seul un utilisateur de l'application autorisée puisse y accéder.

Sur Android, Je peux le faire en utilisant le certificat que je génère à partir du serveur et l'implémenter aux fichiers de projet Android à travers l'exemple de la page de documentation de Google. (À l'aide de l'ID de compte de service & fichiers PKCS12). Le code sur Android pour définir les informations d'identification est comme ceci:

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 

Cependant, pour l'instant je ne peux pas sembler trouver un moyen de mettre en œuvre le même mécanisme dans mon application iOS. Est-il possible d'utiliser l'identifiant de compte google service pour télécharger des fichiers dans l'application iOS afin que l'utilisateur ne doive pas d'abord se connecter à son compte goolge?

+0

Salut @adipurnama, vous avez trouvé la solution à ce problème encore? J'ai le même problème. –

+0

adipurnama, cuGoku> Avez-vous inclus le fichier de fichier de clé privée (.p12) et le mot de passe dans votre application mobile Android? Si oui, est-ce sécuritaire? – Jasper

+0

une solution? merci ... –

Répondre

1

Garder votre clé privée dans l'application n'est pas sûr pour la production et n'est pas la bonne façon de le faire. En outre, vous ne pouvez pas utiliser la même astuce avec IOS.

La solution est de créer une clé api publique (https://console.developers.google.com -> Projet -> références -> Créer une nouvelle clé (dans l'accès du public api) -.>

Android/clé IOS

Cela devrait être assez en sécurité parce que potentiellement la clé est liée au sha-1 et au nom de votre application android Je devrais noter cependant que restreindre ceci n'a pas fonctionné pour moi pourtant, pendant ce temps j'ai laissé le champ vide qui le fait "Toute application permise" - Je vais mettre à jour cette réponse quand je découvre comment faire ceci correctement

Voici comment j'ai fait ceci dans 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); 

Si par hasard vous trouverez comment limiter l'utilisation à une seule application que j'aimerais entendre la réponse aussi bien :)

bonne chance

+0

Salut, avez-vous trouvé un moyen d'ajouter le SHA1 et le paquet pour restreindre l'accès à une seule application Android? J'ai toujours "Login requis" comme erreur. – CeccoCQ

+0

Pas encore malheureusement. Actuellement, il utilise toujours "toutes les applications autorisées". J'adorerais entendre si vous avez trouvé une solution – maxandron

+0

Aucune solution pour moi. Pour l'instant, j'utilise un fichier p12 avec le type de compte de service. Mais je me demande où je peux cacher le fichier p12 dans une application Android ... C'est incroyable qu'il n'y ait pas de solution pour le client Android ... avez-vous des idées? – CeccoCQ

Questions connexes