2014-04-29 25 views
5

Vì vậy, tôi đã cố gắng tải lên tệp âm thanh/video từ ứng dụng iOS lên Google Cloud Server. Tôi muốn người dùng không phải đăng nhập vào tài khoản google của họ trước khi tải lên. Hiện tại, giải pháp làm việc của tôi là làm cho thùng trên máy chủ "mở", về cơ bản là có sẵn cho mọi người trên Internet để đọc/ghi nhóm. tôi đặt khóa API để đối tượng GTLServiceStorage tôi trên iOS:Tải lên Google Cloud Storage bằng tài khoản dịch vụ từ ứng dụng iOS

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

Bằng cách này, người dùng từ bên trong ứng dụng sẽ có thể tải lên mà không đăng nhập.

Bây giờ, tôi muốn thùng ở chế độ riêng tư nên chỉ người dùng từ ứng dụng được ủy quyền mới có thể truy cập.

Trên Android, Tôi có thể làm điều đó bằng chứng chỉ tôi tạo từ máy chủ và triển khai nó vào tệp dự án Android thông qua ví dụ từ trang Tài liệu của Google. (Sử dụng id tài khoản dịch vụ & tệp PKCS12). Mã trên Android để thiết lập các chứng chỉ là như thế này:

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 

Tuy nhiên, bây giờ tôi có thể dường như không tìm thấy một cách để thực hiện các cơ chế tương tự vào ứng dụng iOS của tôi. Có cách nào tôi có thể sử dụng id tài khoản dịch vụ google để tải tệp lên trong ứng dụng iOS để người dùng không phải đăng nhập vào tài khoản goolge của họ trước tiên không?

+0

Hi @adipurnama, bạn đã tìm thấy giải pháp cho vấn đề này chưa? Tôi có cùng một vấn đề. –

+0

adipurnama, cuGoku> Bạn có bao gồm tệp khóa cá nhân (.p12) và mật khẩu bên trong Ứng dụng dành cho thiết bị di động Android của bạn không? Nếu có, điều đó có an toàn không? – Jasper

+0

giải pháp nào? thanks ... –

Trả lời

1

Việc giữ khóa riêng trong ứng dụng không an toàn cho sản xuất và không phải là cách chính xác để thực hiện việc này. Ngoài ra, bạn không thể sử dụng cùng một mẹo với IOS.

Giải pháp là để tạo ra một chìa khóa api công cộng (https://console.developers.google.com -> Dự án -> thông tin -> Tạo khóa mới (dưới truy cập api công cộng) -.> Android/IOS chính

này nên là đủ an toàn vì có khả năng Tôi phải lưu ý rằng mặc dù hạn chế điều này đã không làm việc cho tôi, vì vậy trong thời gian có nghĩa là tôi rời khỏi trường trống mà làm cho nó "Bất kỳ ứng dụng được cho phép" - Tôi sẽ cập nhật câu trả lời này khi tôi tìm hiểu cách thực hiện điều này đúng cách

Đây là cách tôi đã thực hiện việc này trong 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); 

Nếu bạn bởi bất kỳ cơ hội tìm hiểu làm thế nào để hạn chế việc sử dụng một ứng dụng duy nhất tôi rất thích nghe câu trả lời cũng :)

may mắn

+0

Xin chào, bạn có tìm cách thêm SHA1 và gói để hạn chế quyền truy cập vào ứng dụng android đơn không? Tôi luôn "Đăng nhập bắt buộc" là lỗi. – CeccoCQ

+0

Thật không may. hiện tại nó vẫn đang sử dụng "tất cả các ứng dụng được cho phép". Rất thích nghe nếu bạn tìm thấy giải pháp – maxandron

+0

Không có giải pháp nào cho tôi. Hiện tại, tôi đang sử dụng tệp p12 với loại Tài khoản dịch vụ. Nhưng tôi tự hỏi, nơi tôi có thể ẩn các tập tin p12 vào một ứng dụng Android ... Thật đáng kinh ngạc là không có bất kỳ giải pháp cho khách hàng Android ... bạn có bất kỳ ý tưởng? – CeccoCQ

Các vấn đề liên quan