2015-06-04 14 views
28

Tôi đang cố gắng để ứng dụng của mình chạy với Google Cloud Messaging. Tôi đang theo dõi Ứng dụng Quickstart của Google Cloud Messaging có thể tìm thấy tại đây trên github.Quyền được ủy quyền là gì? Không thể tìm thấy gcm_defaultSenderId trong ứng dụng của riêng

Trong ứng dụng khởi động nhanh của họ tại một thời điểm nào đó, chúng tôi yêu cầu dịch vụ Nhắn tin qua đám mây của Google có mã thông báo đăng ký để ứng dụng của chúng tôi có thể nói chuyện với đám mây.

Tôi thấy dòng mã này:

RegistrationIntentService.java::onHandleIntent(Intent intent): 

InstanceID instanceID = InstanceID.getInstance(this); 
String gcmRegistrationToken = instanceID.getToken(getString(R.string.gcm_defaultSenderId), 
        GoogleCloudMessaging.INSTANCE_ID_SCOPE, null); 

Phần rằng là khó hiểu với tôi là giá trị này: R.string.gcm_defaultSenderId Nó được định nghĩa trong ứng dụng QuickStart của họ, nhưng nó sẽ tự động tạo ra.

Làm cách nào để ứng dụng của tôi tạo ra giá trị đó?

Tôi nhìn lên các tài liệu cho InstanceID.getToken đó là heregetToken(java.lang.String, java.lang.String)

InstanceID.getoken trả về một mã thông báo ủy quyền cho một thực thể (ví dụ: dịch vụ điện toán đám mây) để thực hiện một hành động thay mặt cho các ứng dụng xác định bởi Instance ID. Điều này tương tự như mã thông báo OAuth2 ngoại trừ, nó áp dụng cho phiên bản ứng dụng thay vì người dùng.

Đầu mục chức năng trông giống như:

public String getToken (String authorizedEntity, String scope) 

tôi thấy rằng arg đầu tiên mà getToken muốn là String authorizedEntity. vậy, chuỗi AuthorEntity này được cho là gì?
Nó xác định rõ ràng trường hợp của ứng dụng đưa ra yêu cầu, nhưng tôi phải tạo ra nó như thế nào? Trong ứng dụng QuickStart, tôi không thể tìm thấy nó quy định tại res/value/strings.xml, tôi chỉ có thể tìm thấy nó được định nghĩa trong R.java và app/build/generated/res/google-services/debug/values/values.xml

Dường như:

<resources> 
<string name="gcm_defaultSenderId">175643285</string> 
</resources> 

Có chỉ là một chuỗi trong đó và tệp đó được chôn sâu trong cấu trúc dự án. Tôi không thể tìm thấy bất kỳ nơi nào trong mã nơi số này gcm_defaultSenderId đang được tạo theo chương trình.

Tôi bối rối bởi vì, làm thế nào tôi có thể biết chuỗi đó đã có? Tôi không bao giờ xác định chuỗi đó và googling cho "không thể giải quyết gcm_DefaultSenderId" không cho kết quả nào. Tôi đang cố gắng triển khai Google Cloud Messaging trong ứng dụng của riêng mình, vì vậy tất nhiên ứng dụng của riêng tôi sẽ không tự động biết để tạo chuỗi đó. Làm thế nào tôi phải làm cho số id đó?

Đây là lý do tại sao tôi nghĩ rằng điều quan trọng là tôi hiểu những gì chuỗi authorizedEntity này mà InstanceID.getToken muốn, để tôi có thể tạo ra một cách chính xác để cung cấp cho getToken. Có lẽ ý tưởng của tôi là hoàn toàn sai, có lẽ tôi không phải tạo ra gcm_defaultSenderId, nhưng tôi biết rằng tôi không được phép thay đổi R.java, và tệp values.xml cũng nằm trong thư mục "được tạo".

Trợ giúp xin vui lòng? Nếu tôi tìm thấy câu trả lời trong các tìm kiếm của mình, tôi sẽ đăng câu trả lời một cách hạnh phúc.Bất kỳ trợ giúp nào được đánh giá cao, lưu ý: dự án của tôi được xuất khẩu sang Gradle từ Eclipse, do đó nó vẫn sẽ có cấu trúc thư mục/dự án Eclipse, không gây ra bất kỳ sự cố nào, nhưng tệp values.xml ở một nơi khác.

+1

ID người gửi là từ Bảng điều khiển dành cho nhà phát triển, nhưng nếu bạn theo dõi nhanh, nó được tạo cho bạn trong tệp google-services.json mà bạn đã sao chép vào thư mục dự án của mình. – Koh

+0

Bạn có thể thả id R.string và nhận giá trị theo tên: http://stackoverflow.com/a/38995785/606351 – Vaiden

Trả lời

37

Giá trị R.string.gcm_defaultSenderId được tạo ra bởi google-dịch vụ Plugin Gradle trong đó sử dụng một tập tin google-services.json với các hằng số xác định.

Plugin được áp dụng trong Gradle:

apply plugin: 'com.google.gms.google-services' 

Để biết thêm thông kiểm tra Implementing GCM Client on Android và xem làm thế nào để có được các tập tin google-services.json và thiết lập Gradle & ứng dụng trong phát triển giao diện điều khiển.

+2

Đây là câu trả lời đúng. Tệp google-services.json phải nằm trong thư mục gốc của ứng dụng để plugin Gradle có thể tự động tạo ra R.string.gcm_defaultSenderId. Để nhận tệp google-services.json, hãy làm theo hướng dẫn chính thức này: https://developers.google.com/cloud-messaging/android/client – Sotti

+0

Tôi đã cài đặt plugin đó nhưng giá trị chuỗi đó không giải quyết được –

+0

là câu trả lời đúng .. –

12

Đây là id dự án mà chúng tôi cần phải điền vào vị trí của chuỗi đó. Vui lòng tham khảo liên kết sau.

https://developers.google.com/instance-id/guides/android-implementation

tokens Tạo đòi hỏi một ID dự án tạo ra bởi Google Developers Console.

String authorizedEntity = PROJECT_ID; // Project id from Google Developers Console 
String scope = “GCM”; // e.g. communicating using GCM, but you can use any 
         // URL-safe characters up to a maximum of 1000, or 
         // you can also leave it blank. 
String token = InstanceID.getInstance().getToken(authorizedEntity,scope); 
+0

bạn đã tiết kiệm cho tôi một tấn tìm kiếm sir :) – Kushan

+0

Vui mừng khi biết Kushan :) Nhưng nếu bạn đang sử dụng các dịch vụ mới nhất của google sử dụng câu trả lời của @ peter! – Ramesh

+0

Tôi thực sự đang tìm cách sử dụng api InstanceId và sử dụng nó để xóa mã thông báo .. đó là lý do tại sao tôi cần authEntity. Câu trả lời của Peter là những gì tôi đang sử dụng. Nó đã ném một tấn shit vấn đề trên khuôn mặt của tôi do mặc định sử dụng phân tích ứng dụng mà dịch vụ có và api firebase mặc định biến nó trên. Mỗi dịch vụ của tôi có một đầu hơn 60-70 mb do đó vô nghĩa – Kushan

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