2016-01-05 34 views
11

Tôi đã quản lý để sử dụng GCM với thiết bị Android, nhưng giờ tôi đang cố triển khai trên ứng dụng iOS.Nhắn tin qua đám mây của Google với Xcode 7 và iOS 9

Tôi nghĩ rằng tôi đã thực hiện tất cả các bước cần thiết để có thể sử dụng dịch vụ GCM. Tôi đã theo dõi https://developers.google.com/cloud-messaging/ios/client?configured=true để thêm dịch vụ vào ứng dụng hiện có.

Tôi nghĩ rằng mọi thứ được định cấu hình đúng nhưng tôi không thể nhận bất kỳ thông báo nào. Tôi có chứng chỉ APN và tệp GoogleService-info.plist, trên bảng điều khiển là kết quả đầu ra:

2016-01-05 13: 47: 53.864: GCM | Khóa không hợp lệ trong plist checkin: GMSInstanceIDDeviceDataVersion Đã kết nối với GCM 2016-01-05 13: 47: 57.501: GGLInstanceID | Dấu thời gian đăng ký cuối cùng không hợp lệ trong tương lai. 2016/01/05 13: 47: 57,501 TerneraGallega [1014: 444.977] Checkin thành công với AUTHID: 4958686017822257121, tiêu hóa: KSJNg + Aj82uavBXrFeOAfA ==, lastCheckinTimestamp: 1451998077000 Đăng ký Mã: NC-dd9fCvFs: APA91bHMfbvLczxSPLQsLeEJASU_RfV4wvVuPs2u4VJDtpC8oB2cm1AKr6cH_LFeLsQzb94Kk9iwez8fsOvgzNns_9DU3i8Ema1oCKIwcNFzenNpAhViyGHah4E7-RkQlg1durYSEQRD Đã đăng ký/chủ đề/toàn cầu

ngay sau khi tôi nhận được điều này nếu tôi thực hiện một yêu cầu POST với:

{ "thành": "nC-dd9fCvFs: APA91bHMfbvLczxSPLQsLeEJASU_RfV4wvVuPs2u4VJDtp C8oB2cm1AKr6cH_LFeLsQzb94Kk9iwez8fsOvgzNns_9DU3i8Ema1oCKIwcNFzenNpAhViyGHah4E7-RkQlg1durYSEQRD", "content_available": đúng, "thông báo": { "cơ thể": "kết hợp tuyệt vời", "title": "Bồ Đào Nha vs Đan Mạch" }}

nỗ lực đầu tiên nó trả về một thông báo thành công nhưng không có log cũng không thông báo được hiển thị trong các thiết bị (với các ứng dụng trên foreground)

Sau một vài phút, trên một thử của yêu cầu POST bây giờ nó trả về một thất bại với

{ "multicast_id": 7256343774952522277, "thành công": 0, "thất bại": 1, "canonical_ids": 0, "Kết quả": [ { "lỗi" : "NotRegistered" } ] }

Bây giờ, tôi đã tải về GCM Ví dụ từ trang Google, cấu hình APN và cũng đã nhận GoogleService-info.plist, khi khởi chạy GCM Ví dụ Swift nộp ngay khi nó mở trên thiết bị có nội dung:

Đăng ký thành công! Kiểm tra giao diện điều khiển gỡ lỗi xcode fot mã thông báo đăng ký mà bạn có thể sử dụng ...

Sau này, nếu bạn đặt một yêu cầu POST với

{ "thành": "mVEtHyTXEOg: APA91bGvK_Uf2ZKgpguWUOto3CXQzIT1z22uJ446mYkNqMwL9VLDYdGtdm_4vS8rcl3T9OeqEC1UWbdKAOyuoweW1GiU0mv0cDSPW03y4XGx19JcR6rxsiWRNUjtADX6iNAW8wM8UBJl", "content_available": đúng, "thông báo": { "cơ thể ":" phù hợp tuyệt vời! ", " tiêu đề ":" Bồ Đào Nha so với Đan Mạch " } }

nó một lần nữa trả về một

{ "multicast_id": 7435981433811133310, "thành công": 0, "thất bại": 1, "canonical_ids": 0, "Kết quả": [ { "lỗi": "NotRegistered" } ] }

có thể ai đó đã thực hiện GCM trên một ứng dụng có thể chỉ cho tôi những gì tôi 'M mất tích?

------- EDIT -------

Cuối cùng tôi đã làm cho nó hoạt động bằng cách sử dụng một chứng chỉ phân phối thay vì một giấy chứng nhận phát triển ... có vẻ như rằng tôi có tất cả các cấu hình tốt nhưng tôi thiếu một cái gì đó với chứng chỉ phát triển.

PS: Trong APN trang hồ sơ dưới ID Tôi đã kích hoạt cả hai giấy chứng nhận Đẩy thông báo (đó là lý do tại sao tôi nghĩ rằng tất cả mọi thứ là tốt cấu hình)

Nhưng tôi sẽ để lại câu hỏi này mở vì tôi không thể sử dụng điều này trong hoàn cảnh phát triển

+0

Bạn có thể kiểm tra [tài liệu] (https: //developers.google.c om/cloud-messaging/http # response) cho các nguyên nhân có thể có của lỗi 'NotRegistered'. Nó nói: "Nếu nó là" NotRegistered', bạn nên xóa ID đăng ký khỏi cơ sở dữ liệu máy chủ của mình vì ứng dụng đã được gỡ cài đặt khỏi thiết bị hoặc ứng dụng khách không được định cấu hình để nhận tin nhắn ". – gerardnimo

+0

Hi @gerardnimo, có, lỗi đó có nghĩa là bạn phải xóa mã thông báo vì ứng dụng không còn tồn tại cho người dùng đó (điều đó không đúng) nhưng tôi không lưu mã thông báo, tôi muốn hệ thống chạy trước ..:( – neteot

Trả lời

1

Tôi đã có thể thực hiện điều tương tự như bản sửa lỗi trong bản chỉnh sửa của bạn mà không gây rối với chứng chỉ. Rõ ràng điều này sẽ không hoạt động nếu bạn đã có mọi thứ thiết lập và đang sử dụng cả môi trường phát triển và sản xuất, nhưng nếu bạn chỉ đang ở giai đoạn phát triển thì sẽ dễ dàng thay đổi.

Trong dự án ví dụ GCM (đối với Objective-C) trong ứng dụng: didRegisterForRemoteNotificationsWithDeviceToken Tôi chỉ đơn giản là thay đổi mã từ:

_registrationOptions = @{kGGLInstanceIDRegisterAPNSOption:deviceToken, 
          kGGLInstanceIDAPNSServerTypeSandboxOption:@YES}; 

Để

_registrationOptions = @{kGGLInstanceIDRegisterAPNSOption:deviceToken, 
          kGGLInstanceIDAPNSServerTypeSandboxOption:@NO}; 

Tôi hiểu điều này là không chính xác một thực sửa chữa, nhưng ít nhất nó đã làm cho nó hoạt động mà không thay đổi bất kỳ chứng chỉ nào (miễn là chứng chỉ sản xuất được thiết lập.

+0

Hi @jrobe yes, trên thực tế là nhanh chóng 2 nếu bạn muốn bất động sản sử dụng chứng chỉ sản xuất với GCM, bạn phải đặt 'kGGLInstanceIDAPNSServerTypeSandboxOption = false' nếu không bạn sẽ luôn nhận được' {NotRegistered} 'nhưng khi tôi đã thử chứng chỉ phát triển, tôi đặt cờ thành true (nhưng vẫn không hoạt động) – neteot

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