2014-04-29 12 views
5

तो मैं आईओएस ऐप से ऑडियो क्लाउड सर्वर पर ऑडियो/वीडियो फाइल अपलोड करने की कोशिश कर रहा हूं। मैं चाहता हूं कि उपयोगकर्ता अपलोड करने से पहले अपने Google खाते में लॉगिन न करें। वर्तमान में, मेरे कामकाजी समाधान बाल्टी को "ओपन" सर्वर पर बनाना है, जो मूल रूप से है जो बाल्टी को पढ़ने/लिखने के लिए इंटरनेट पर हर व्यक्ति के लिए उपलब्ध है।आईओएस ऐप से सेवा खाते का उपयोग कर Google क्लाउड स्टोरेज पर अपलोड करें

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

इस तरह, अनुप्रयोग के भीतर से उपयोगकर्ता लॉगिन के बिना अपलोड करने के लिए सक्षम होना चाहिए: मैं iOS पर मेरी GTLServiceStorage वस्तु के लिए एपीआई कुंजी सेट।

अब, मैं चाहता हूं कि बाल्टी निजी हो, इसलिए अधिकृत ऐप से केवल उपयोगकर्ता ही इसका उपयोग कर सकता है।

एंड्रॉयड पर, मैं प्रमाण पत्र मैं सर्वर से पैदा करते हैं और गूगल प्रलेखन पेज से उदाहरण के माध्यम से एंड्रॉयड परियोजना फाइलों को इसे लागू का उपयोग कर इसे ऐसा करने में सक्षम हूँ। (सेवा खाता आईडी & पीकेसीएस 12 फाइलों का उपयोग करना)। 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 एप्लिकेशन में एक ही तंत्र को लागू करने के लिए एक रास्ता खोजने के नहीं कर पा रहे। क्या कोई तरीका है कि मैं आईओएस ऐप के भीतर फाइल अपलोड करने के लिए Google सेवा खाता आईडी का उपयोग कर सकता हूं ताकि उपयोगकर्ता को अपने गोल्ज खाते में पहले लॉगिन नहीं करना पड़े?

+0

हाय @adipurnama, यदि आप पाते हैं अभी तक इस समस्या का समाधान? मुझे एक ही समस्या है। –

+0

adipurnama, cuGoku> क्या आपने निजी कुंजी फ़ाइल (.p12) फ़ाइल और अपने एंड्रॉइड मोबाइल ऐप के अंदर पासवर्ड शामिल किया था? यदि हां, तो क्या यह सुरक्षित है? – Jasper

+0

कोई समाधान? धन्यवाद ... –

उत्तर

1

आवेदन में अपनी निजी कुंजी रखना उत्पादन के लिए सुरक्षित नहीं है और ऐसा करने का सही तरीका नहीं है। इसके अलावा, आप आईओएस के साथ एक ही चाल का उपयोग नहीं कर सकते हैं। > परियोजना - -

समाधान एक सार्वजनिक api कुंजी (https://console.developers.google.com बनाने के लिए है> साख -> नई कुंजी (सार्वजनिक एपीआई पहुँच के तहत बनाएं) -।> एंड्रॉयड/आईओएस कुंजी

यह सुरक्षित पर्याप्त क्योंकि संभावित होना चाहिए कुंजी sha-1 और आपके एंड्रॉइड एप्लिकेशन के नाम से जुड़ी हुई है। मुझे ध्यान रखना चाहिए कि इस पर प्रतिबंध लगाने के लिए अभी तक मेरे लिए काम नहीं किया गया है, इसलिए इसी समय मैंने खाली क्षेत्र छोड़ा जो इसे "किसी भी आवेदन की अनुमति देता है" जब मैं यह ठीक से कैसे करना है, तो मैं यह जवाब अपडेट करूंगा।

यहां मैंने एंड्रॉइड में यह कैसे किया:

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 और पैकेज जोड़ने का कोई तरीका मिला? मैंने त्रुटि के रूप में हमेशा "लॉग इन आवश्यक" किया है। – CeccoCQ

+0

अभी तक दुर्भाग्य से नहीं। वर्तमान में यह अभी भी "सभी अनुमत अनुप्रयोगों" का उपयोग कर रहा है। यह सुनना अच्छा लगेगा कि आपको समाधान मिला है – maxandron

+0

मेरे लिए कोई समाधान नहीं है। अभी के लिए, मैं सेवा खाता प्रकार के साथ एक पी 12 फ़ाइल का उपयोग कर रहा हूँ। लेकिन मैं सोच रहा हूं कि मैं एंड्रॉइड एप्लिकेशन में पी 12 फाइल को छुपा सकता हूं ... यह अविश्वसनीय है कि एंड्रॉइड क्लाइंट के लिए कोई समाधान नहीं है ... क्या आपके पास कोई विचार है? – CeccoCQ

संबंधित मुद्दे