Mã thông báo thiết bị APN có phải là duy nhất cho từng ứng dụng riêng lẻ không?


76

Tôi có hai ứng dụng trên cửa hàng iTunes - cả hai đều triển khai thông báo đẩy. Trong khi tôi đang thử nghiệm gửi thông báo đến các ứng dụng sản xuất này, tôi nhận thấy rằng một cú hích dành cho ứng dụng A đã được đặt tiêu đề và mở ứng dụng B.

Cả hai ứng dụng này đều được cài đặt trên cùng một điện thoại. Tôi nhìn vào bảng thiết bị của mình và thấy rằng Mã thông báo thiết bị (và tất nhiên, ID thiết bị) được liệt kê cho hai ứng dụng đều giống nhau.

Theo yêu cầu, tôi đang sử dụng hai chứng chỉ khác nhau trên máy chủ - một chứng chỉ cho mỗi ứng dụng. Tôi đã giả định rằng Mã thông báo thiết bị hoặc chứng chỉ sẽ định tuyến thông báo đến đúng ứng dụng nhưng rõ ràng là không.

Tôi có thể thấy trong NSLog rằng các mã thông báo được gửi từ mỗi ứng dụng thực sự giống nhau.

Mã thông báo thiết bị có phải là duy nhất cho mỗi ứng dụng không? Nếu vậy, bất kỳ ý tưởng nào về cách điện thoại thử nghiệm của tôi có thể gửi cùng một mã thông báo thiết bị cho cả hai ứng dụng đến máy chủ của tôi. Hãy nhớ rằng đây là từ hai ứng dụng hiện có trên cửa hàng ứng dụng.

Cảm ơn vì bất kì sự giúp đỡ!

Câu trả lời:


91

LƯU Ý : đây là câu trả lời cũ chỉ đúng với iOS <= 6. Xem câu trả lời của user1641761 cho cách tiếp cận hiện tại.

Tìm ra. Mã thông báo thiết bị KHÔNG phải là duy nhất cho ghép nối ứng dụng điện thoại. Chúng là duy nhất cho điện thoại. Nếu bạn có nhiều ứng dụng đẩy trên cùng một điện thoại, tất cả chúng sẽ sử dụng cùng một Mã thông báo thiết bị. Chứng chỉ bạn sử dụng để gửi thông báo sẽ chỉ định ứng dụng đó sẽ chuyển đến.


1
Cảm ơn vì câu hỏi và câu trả lời, điều đó là hữu ích khi biết. +1 cho mỗi. Nó có ý nghĩa khi điện thoại sẽ quyết định ứng dụng nào được nhắm mục tiêu bằng chứng chỉ máy chủ, như xác thực ý định của nhà phát triển.

3
Xin chào @Mups. Trong câu hỏi mở đầu, bạn nói rằng: "Theo yêu cầu, tôi đang sử dụng hai chứng chỉ khác nhau trên máy chủ - một chứng chỉ cho mỗi ứng dụng". Sau đó, trong câu trả lời của bạn, bạn nói: "Chứng chỉ bạn sử dụng để gửi thông báo sẽ chỉ định ứng dụng đó sẽ chuyển đến" .... Vậy, tại sao nó không hoạt động? Tôi sắp triển khai một thiết lập tương tự cho phần phụ trợ của mình và tôi muốn chắc chắn. Cảm ơn.
tompave

2
Ngoài ra, hãy lưu ý rằng mã thông báo thiết bị khác nhau tùy thuộc vào loại bản dựng của bạn. Các bản dựng phát triển có một mã thông báo thiết bị và các bản dựng phân phối (sản xuất) có một mã thông báo khác. Mã thông báo thiết bị cũng được đặt lại thành thứ khác khi người dùng cài đặt lại Hệ điều hành.
radesix

7
Đây là một câu trả lời cũ, đúng với iOS cũ, tức là iOS 6 trở xuống. Kể từ iOS 7, apple đã thay đổi các quy tắc và mã thông báo thiết bị không còn là duy nhất cho thiết bị nữa. Tất cả các ứng dụng trên cùng một thiết bị sẽ có các mã thông báo khác nhau không giống như iOS 6 trở xuống.
Kameshwar Sheoran

2
bỏ phiếu này xuống, vì nó không được cập nhật nữa. Xem câu trả lời của user1641761.
Daniel

52

iOS 7 xử lý điều này theo cách khác. Hiện tại là DUY NHẤT.

Vui lòng xem điểm 1 trong bài viết này: http://urbanairship.com/blog/2013/10/03/how-ios-7-handles-push-dierencely

"Trước iOS 7, mã thông báo thiết bị giống nhau trên tất cả các cài đặt ứng dụng trên một thiết bị nhất định. Các ứng dụng khác nhau trên điện thoại của bạn, cho dù Tap Tap Revenge hay USA Today, sẽ sử dụng cùng một địa chỉ, tức là mã thiết bị, để định tuyến đẩy thông báo cho bạn. Thông tin xác thực bảo mật mà bạn ghép nối với một tin nhắn sẽ đảm bảo tin nhắn đó đến đúng ứng dụng. Trên iOS 7, Apple đã tiến thêm một bước nữa và đảm bảo rằng mã thông báo thiết bị hiện khác trong mỗi lần cài đặt ứng dụng. Điều này hữu ích bảo vệ hơn nữa quyền riêng tư của người dùng bằng cách xóa một số nhận dạng cấp điện thoại khác. "

Xem thêm Mã thông báo thiết bị ios 7 khác nhau đối với cùng một thiết bị


16

Chia sẻ sự hiểu biết của tôi và một vài câu trả lời từ các Nhà phát triển của Apple:

  • Mã thông báo thiết bị
    • Mã thông báo thiết bị là mã nhận dạng duy nhất của thiết bị.
    • APN tạo mã thông báo thiết bị bằng chứng chỉ thiết bị duy nhất (có thể đang sử dụng cấu hình cấp phép)
    • Mã thông báo thiết bị có thể được thay đổi. Vì vậy, hãy đảm bảo bạn gửi mã thông báo thiết bị cập nhật đến máy chủ của mình mỗi lần.
    • Mã thông báo thiết bị là CÙNG cho tất cả các ứng dụng trên thiết bị.
    • Nó dành riêng cho thiết bị và không dành riêng cho ứng dụng.
    • Mã thông báo thiết bị có thể khác nhau đối với hộp cát và sản xuất.
      • Dựa trên hồ sơ cấp phép (hộp cát hoặc sản xuất), APN có thể tạo mã thông báo thiết bị khác nhau cho hộp cát và sản xuất cho cùng một thiết bị.
    • Sau đó, làm thế nào để phân biệt thông báo đẩy trên thiết bị? Đó là ứng dụng nào?
      • Nó thực hiện điều đó dựa trên số nhận dạng ứng dụng và chứng chỉ SSL được cài đặt trên máy chủ (sử dụng thông báo được đẩy đến máy chủ APN).
  • Người giới thiệu

1
Câu trả lời sai hoặc lỗi thời. Câu trả lời của bạn không còn hợp lệ theo tài liệu của apple. Vui lòng tham khảo tài liệu tại đây developer.apple.com/library/content/documentation/…
Augustine PA

Mã thông báo thiết bị là CÙNG cho tất cả các ứng dụng trên thiết bị. Không, Nó giống như - Khi đăng ký thành công, APN sẽ gửi một mã thông báo thiết bị dành riêng cho ứng dụng đến thiết bị.
Nico

8

Điều đó nói rằng, hãy nhớ rằng Apple bảo lưu quyền thay đổi thiết bị APNToken khi họ thấy phù hợp, vì vậy đừng sử dụng nó để nhận dạng duy nhất một thiết bị / người dùng.


1

Mã thông báo thiết bị cho thông báo đẩy dành riêng cho ứng dụng. Không phải thiết bị cụ thể. tức là Mã thông báo thiết bị sẽ khác nhau và duy nhất cho nhiều ứng dụng trên cùng một thiết bị.

Theo apple,

Bằng cách hỗ trợ thông báo từ xa, bạn có thể cung cấp thông tin cập nhật cho người dùng ứng dụng của mình, ngay cả khi ứng dụng không chạy. Để có thể nhận và xử lý thông báo từ xa, ứng dụng của bạn phải:

  • Bật thông báo từ xa.

  • Đăng ký với dịch vụ Thông báo đẩy của Apple (APN) và nhận mã thông báo thiết bị dành riêng cho ứng dụng.

  • Gửi mã thông báo của thiết bị đến máy chủ của nhà cung cấp thông báo của bạn.

  • Triển khai hỗ trợ xử lý các thông báo từ xa đến.

Mã thông báo thiết bị dành riêng cho ứng dụng là duy nhất trên toàn cầu và xác định một tổ hợp thiết bị-ứng dụng. Khi nhận được mã thông báo thiết bị từ các APN trong ứng dụng của bạn, bạn có trách nhiệm mở kết nối mạng với nhà cung cấp của mình. Trong ứng dụng của bạn, bạn cũng có trách nhiệm chuyển tiếp mã thông báo thiết bị cùng với bất kỳ dữ liệu liên quan nào khác mà bạn muốn gửi đến nhà cung cấp. Sau đó, khi nhà cung cấp gửi yêu cầu thông báo từ xa tới APN, nó phải bao gồm mã thông báo thiết bị, cùng với tải trọng thông báo. Để biết thêm về điều này, hãy xem Tổng quan về APN.

Không bao giờ lưu trữ mã thông báo thiết bị trong ứng dụng của bạn; thay vào đó, hãy lấy chúng từ hệ thống khi bạn cần. APN cấp mã thông báo thiết bị mới cho ứng dụng của bạn khi một số sự kiện nhất định xảy ra. Mã thông báo thiết bị được đảm bảo sẽ khác nhau, ví dụ: khi người dùng khôi phục thiết bị từ bản sao lưu, khi người dùng cài đặt ứng dụng của bạn trên thiết bị mới và khi người dùng cài đặt lại hệ điều hành. Tìm nạp mã thông báo, thay vì dựa vào bộ nhớ cache, đảm bảo rằng bạn có mã thông báo thiết bị hiện tại cần thiết để nhà cung cấp của bạn giao tiếp với APN. Khi bạn cố gắng tìm nạp mã thông báo thiết bị nhưng nó không thay đổi, phương thức tìm nạp sẽ nhanh chóng trả về.

Bạn có thể tham khảo tài liệu của apple tại đây Hướng dẫn lập trình thông báo cục bộ và từ xa


0

Bạn không thể sử dụng mã thông báo làm định danh duy nhất nhưng hãy xóa mã thông báo cũ bằng cách sử dụng lưu trong keygen (trợ giúp từ itunes) và xóa mã thông báo cũ và thêm mã mới vào cơ sở dữ liệu của bạn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.