2016-01-31 15 views
5

Tôi đang sử dụng api lịch google để nhận sự kiện từ lịch công khai. Trong google phát triển console Tôi đã tạo ra một chìa khóa tài khoản dịch vụ (json) mà tôi sử dụng để thiết lập các GoogleCredential trong mã android như sau:android google calendar api không hoạt động khi đang phát hành

AssetManager am = getAssets(); 
InputStream inputStream = am.open("key-file-name.json"); 

GoogleCredential credential = GoogleCredential.fromStream(inputStream); 

credential =credential.createScoped(Arrays.asList("https://www.googleapis.com/auth/calendar.readonly")); 

Sau đó, tôi sử dụng GoogleCredential này để có được những đối tượng lịch

Calendar client = new Calendar.Builder(AndroidHttp.newCompatibleTransport(), 
        new JacksonFactory(), 
        credential).setApplicationName("someAppName").build(); 

sau đó, tôi nhận được 5 sự kiện tiếp theo từ lịch này

com.google.api.services.calendar.model.Events nextEvent = 
          client.events().list("[email protected]") 
            .setTimeMin(new DateTime(new java.util.Date(), java.util.TimeZone.getDefault())) 
            .setMaxResults(5) 
            .setOrderBy("startTime") 
            .setSingleEvents(true) 
            .setShowDeleted(false) 
            .execute(); 

Trong khi mã này hoạt động tốt trong gỡ lỗi khi chạy trong studio android, khi tôi xây dựng để phát hành (ký với tệp kho khóa) nó không hoạt động. Nó chỉ trả về ngoại lệ sau đây:

com.google.aacbc: 404 Not Found 3097-3187/com.news.apoelnews W/System.err: Not Found 3097-3187/com.news.apoelnews W /System.err:
tại com.google.aacdacb (Nguồn không xác định)

Xin vui lòng trợ giúp!

CẬP NHẬT Tôi đã thêm việc sử dụng khóa API android trong các mã như sau:

com.google.api.services.calendar.model.Events nextEvent = 
client.events().list("[email protected]") 
.setTimeMin(new DateTime(new java.util.Date(), java.util.TimeZone.getDefault())) 
.setMaxResults(5) 
.setOrderBy("startTime") 
.setSingleEvents(true) 
.setShowDeleted(false) 
.setKey("api-key-string_from_developer_console")) 
.execute(); 

Điều này làm cho ngoại lệ sau đây:

W/System.err: com .google.api.client.googleapis.json.GoogleJsonResponseException: 403 Bị cấm W/System.err: "mã": 403, W/System.err: "errors": [{ W/System.err: "tên miền" : "usageLimits", W/System.err:
"message": "Có một hạn chế cho mỗi IP hoặc mỗi Referer cấu hình về khóa API của bạn và yêu cầu không phù hợp với những hạn chế này

Xin lưu ý rằng các phím API được tạo bằng cách sử dụng gỡ lỗi và bản phát hành SHA-1.

+0

Vì bạn đang sử dụng tài khoản dịch vụ, bạn đang sử dụng Lịch cho làm việc (Google Apps for Work)? – adjuremods

+0

Không, tôi không .......................... – Louis

+0

Tại sao lại sử dụng Tài khoản dịch vụ? Từ những gì tôi biết, bạn có thể sử dụng Tài khoản dịch vụ nếu bạn đang sử dụng Google Apps for Work ([ủy quyền ủy quyền trên toàn miền] (https://developers.google.com/google-apps/calendar/concepts/domain#accessing_domain_calendars_as_an_app)). – adjuremods

Trả lời

6

Vấn đề là trong thời gian xây dựng trong phiên bản tùy chọn gradle 'minifyenable true' là rối tung với tên lớp google api. Vì vậy, giải pháp là bao gồm: -keep class com.google.api. ** {*; } trong proguard

+0

tôi gặp vấn đề tương tự. Làm việc tốt cho tôi. –

0

Có api/khóa tạo cho Keystore Signed, và có u thay đổi phím api trong dự án ur mà phù hợp Keystore phát hành của bạn

+0

Tôi đã tạo khóa API có gỡ lỗi và thả SHA-1. Nhưng như bạn thấy trong mã, tôi chỉ sử dụng tệp json được tạo khi tạo khóa tài khoản dịch vụ. Tôi nên sử dụng khóa API ở đâu? Và nếu khóa API là cần thiết thì tại sao nó hoạt động trong gỡ lỗi? Cảm ơn bạn – Louis

+0

Json ur sử dụng là của Degug Keystore, Tải xuống Json cho kho khóa phát hành và thay thế nó trong thư mục tài sản của bạn –

+0

Khi tôi tạo khóa tài khoản dịch vụ tạo tệp json, tôi không chỉ định SHA-1 xác định gỡ lỗi hoặc phát hành. Tôi có thể tải xuống json cho kho khóa phát hành ở đâu? Các khóa API được tạo với bản phát hành SHA-1 không tạo ra tệp json – Louis

0

tôi không biết nhiều về Api Lịch Google nhưng Đã cố gắng tạo khóa SHA-1 bằng kho khóa-phát hành của bạn? nếu bạn muốn tạo apk phát hành thì bạn phải tạo khóa mới cho Lịch Google và phát hành lại nó sẽ hoạt động cho bạn.

theo này một số liên kết hữu ích: https://developer.android.com/studio/publish/app-signing.html#releasemode

https://coderwall.com/p/r09hoq/android-generate-release-debug-keystores

thử nó

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