9

Tôi đang sử dụng SDK Java cho Android Publisher v2Oauth2 v2. Khi tôi tạo tài khoản dịch vụ, tôi đã được cung cấp JSON của Google Play Android Developer tài khoản dịch vụ có id ứng dụng, email, khóa cá nhân, v.v. Tôi đã cố gắng xem xét và tìm hiểu cách tạo Thông tin đăng nhập để tôi sử dụng dịch vụ AndoirdPublisher để tìm nạp thông tin về đăng ký người dùng ứng dụng Android của tôi, quyền lợi vv và lưu trữ thông tin này trên các máy chủ phụ trợ của chúng tôi.HOWTO tạo GoogleCredential bằng cách sử dụng Tài khoản dịch vụ JSON

Tôi đang gặp khó khăn khi cố gắng tìm ra cách để thực hiện việc này. Không có tài liệu nào tôi đã thấy cho đến nay giúp tạo ra GoogleCredential bằng cách sử dụng JSON đã tải xuống.

Ví dụ: đây là documentation nhưng nó chỉ đề cập đến tệp P12 chứ không phải JSON. Tôi muốn tránh P12 nếu có thể vì tôi có nhiều khách hàng & Tôi muốn lưu JSON này trong một số loại cơ sở dữ liệu & sau đó sử dụng nó để tạo thông tin xác thực cho từng khách hàng.

Chỉ cần làm rõ tôi đang cố gắng để tạo ra các đối tượng GoogleCredential như mô tả ở đây,

import com.google.api.client.googleapis.auth.oauth2.GoogleCredential; 
import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport; 
import com.google.api.client.http.HttpTransport; 
import com.google.api.client.json.JsonFactory; 
import com.google.api.client.json.jackson2.JacksonFactory; 
import com.google.api.services.sqladmin.SQLAdminScopes; 

// ... 

String emailAddress = "[email protected]"; 
JsonFactory JSON_FACTORY = JacksonFactory.getDefaultInstance(); 
HttpTransport httpTransport = GoogleNetHttpTransport.newTrustedTransport(); 
GoogleCredential credential = new GoogleCredential.Builder() 
    .setTransport(httpTransport) 
    .setJsonFactory(JSON_FACTORY) 
    .setServiceAccountId(emailAddress) 
    .setServiceAccountPrivateKeyFromP12File(new File("MyProject.p12")) 
    .setServiceAccountScopes(Collections.singleton(SQLAdminScopes.SQLSERVICE_ADMIN)) 
    .build(); 

Nhưng thay vì thiết lập các tài khoản dịch vụ sử dụng P12 tập tin như vậy setServiceAccountPrivateKeyFromP12File(), tôi muốn sử dụng JSON mang cùng thông tin & được tạo khi tôi tạo tài khoản dịch vụ.

+0

Không hoàn toàn chắc chắn những gì bạn đang yêu cầu, nhưng trước tiên bạn nên thực hiện theo các bước được liệt kê [tại đây] (https://developers.google.com/android-publisher/getting_started#using_a_service_account). Nó sẽ cho bạn biết làm thế nào để tạo một tài khoản dịch vụ nếu bạn muốn sử dụng nó. Để đảm bảo bạn có thể thực sự kéo thông tin cần kiểm tra, hãy bật API nhà phát triển Android trên Google Play, liên kết dự án của bạn với tài khoản xuất bản Google Play và cấp các quyền cần thiết cho tài khoản dịch vụ của bạn trong bảng điều khiển Cửa hàng Google Play. – Andy

+0

@Andy Cảm ơn. Vâng, tôi đã tạo một tài khoản dịch vụ và muốn sử dụng JSON đã được tạo cho nó (thay vì tệp P12) để tạo đối tượng GoogleCredential. – Chantz

+0

@Andy Tôi đã cập nhật câu hỏi để cung cấp thêm thông tin. – Chantz

Trả lời

18

Tôi đã có thể giải quyết vấn đề này bằng cách tìm hiểu mã nguồn cho GoogleCredential trên github (hiện tại là here).

Tắt phiên bản google-api-java-client đã tồn tại trong mã của tôi hơi bị lỗi thời. Tôi đã nâng cấp nó lên phiên bản mới nhất 1.20.0 & Tôi hiện có thể trực tiếp chỉ định đối tượng JSON được tạo để tạo GoogleCredential. Tôi muốn Google sẽ cập nhật tài liệu của họ.

Dưới đây là đoạn mã,

InputStream resourceAsStream = AuthTest.class.getClassLoader().getResourceAsStream("Google-Play-Android-Developer.json"); 

GoogleCredential credential = GoogleCredential.fromStream(resourceAsStream); 

Đó đơn giản.

+6

Một số Google Api cần một số phạm vi bạn có thể thêm phạm vi bằng cách sử dụng: thông tin xác thực = thông tin xác thực.createScoped (PredictionScopes.all()); –

+0

Rủi ro bảo mật khi đưa khóa JSON vào apk của bạn là gì? Có vẻ như là một ý tưởng tồi ... nhưng tôi không có một giải pháp tốt hơn. – Innova

+0

@Chantz Bạn đã đặt tệp 'Google-Play-Android-Developer.json' vào đâu? Tôi đặt nó vào trong thư mục 'app' nhưng nó cho tôi vô giá trị. –

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