Độ dài tối đa của văn bản cảnh báo Thông báo đẩy là gì?


Câu trả lời:


245

Các giới hạn thực sự cho văn bản cảnh báo không được ghi lại ở bất cứ đâu. Điều duy nhất tài liệu nói là:

Trong iOS 8 trở lên, kích thước tối đa được phép cho tải trọng thông báo là 2 kilobyte; Dịch vụ thông báo đẩy của Apple từ chối mọi thông báo vượt quá giới hạn này. (Trước iOS 8 và trong OS X, kích thước tải trọng tối đa là 256 byte.)

Đây là những gì tôi có thể tìm thấy khi thực hiện một số thí nghiệm.

  • Cảnh báo: Trước iOS 7, giới hạn hiển thị cảnh báo là 107 ký tự. Các tin nhắn lớn hơn đã bị cắt ngắn và bạn sẽ nhận được "..." ở cuối tin nhắn được hiển thị. Với iOS 7, giới hạn dường như được tăng lên thành 235 ký tự. Nếu bạn đi quá 8 dòng, tin nhắn của bạn cũng sẽ bị cắt ngắn.
  • Biểu ngữ: Biểu ngữ được cắt ngắn khoảng 62 ký tự hoặc 2 dòng.
  • Trung tâm thông báo: Các tin nhắn trong trung tâm thông báo bị cắt ngắn khoảng 110 ký tự hoặc 4 dòng.
  • Màn hình khóa: Tương tự như một trung tâm thông báo.

Cũng như một lời nhắc nhở ở đây là một lưu ý rất tốt từ tài liệu chính thức:

Nếu cần, iOS cắt ngắn tin nhắn của bạn để nó phù hợp với từng kiểu gửi thông báo; để có kết quả tốt nhất, bạn không nên cắt bớt tin nhắn của mình.


8
Cần được làm rõ rằng UIAlertView trong ứng dụng không có giới hạn hiển thị; văn bản trên một độ dài nhất định sẽ đi vào chế độ xem cuộn. Tuy nhiên, tin nhắn SMS hoặc cảnh báo đẩy có thể có giới hạn 107 ký tự, tuy nhiên.
azdev

1
Và văn bản hiển thị không bị giới hạn bởi tải trọng, bởi vì khi bạn sử dụng phương thức bản địa hóa, nó không còn khớp với 1: 1 nữa. Tải trọng có thể ngắn trong khi tin nhắn cuối cùng có thể dài hơn nhiều. Câu hỏi là về việc hiển thị thông báo, nó không liên quan chặt chẽ đến chiều dài tối đa của tải trọng.
Marcin

1
Tôi có thể gửi một tải trọng lớn đến hộp cát và nó sẽ được gửi, nhưng máy chủ sản xuất rất hạn chế chỉ 256 byte và không thêm một byte.
DoctorDbx

bất cứ ai có thể nói chiều dài văn bản hiển thị đẩy GCM Android?
harikrish Nam

1
1. Đối với thông báo Giao thức thoại qua Internet (VoIP), kích thước tải trọng tối đa là 5 KB (5120 byte). 2. Đối với tất cả các thông báo từ xa khác, kích thước tải trọng tối đa là 4 KB (4096 byte).
vikram

26

Nó sẽ là 236 byte. Không có giới hạn về kích thước của văn bản cảnh báo theo như tôi biết, mà chỉ có tổng kích thước tải trọng. Vì vậy, xem xét nếu tải trọng là tối thiểu và chỉ chứa thông tin cảnh báo, nó sẽ trông như sau:

{"aps":{"alert":""}}

Điều đó chiếm 20 ký tự (20 byte), để lại 236 byte để đặt trong chuỗi cảnh báo. Với ASCII sẽ có 236 ký tự và có thể ít hơn với UTF8 và UTF16.


Mã hóa ASCII vi phạm thông số JSON, yêu cầu UTF-8, UTF-16LE, UTF-16BE, UTF-32LE hoặc UTF-32BE. Xem ietf.org/rfc/rfc4627.txt ; trang 4.
Aaron Brager

14
ASCII là tập con của UTF-8, vì vậy việc truyền ASCII 8 bit qua dây luôn luôn an toàn.
Patrick Horn

Chỉ tò mò, tại sao bạn lại đề cập thì nó phải là 236 byte. .. Tôi đang chạy với vấn đề cắt ngắn..nếu tôi đếm tổng chiều dài char thì nó không vượt quá 1024 char, chiều dài thông báo cắt ngắn char là 509 tôi đang nhận được. Điều gì có thể là lý do có thể của phản ứng cắt ngắn. Bất kì lời đề nghị nào !!
Hitendra Joshi

15

Giới hạn của các thông báo định dạng nâng cao được ghi lại ở đây .

Nó tuyên bố rõ ràng:

Tải trọng không được vượt quá 256 byte và không được kết thúc bằng null.

ascandroli tuyên bố ở trên rằng họ có thể gửi tin nhắn với 1400 ký tự. Thử nghiệm của riêng tôi với định dạng thông báo mới cho thấy rằng một tin nhắn chỉ 1 byte vượt quá giới hạn 256 byte đã bị từ chối. Cho rằng các tài liệu rất rõ ràng về điểm này, tôi đề nghị sử dụng 256 sẽ an toàn hơn bất kể bạn có thể đạt được bằng thực nghiệm gì vì không có gì đảm bảo Apple sẽ không thay đổi thành 256 trong tương lai.

Đối với chính văn bản cảnh báo, nếu bạn có thể điều chỉnh nó trong tổng kích thước tải trọng 256 thì nó sẽ được hiển thị bởi iOS. Họ cắt bớt thông báo hiển thị trên thanh trạng thái, nhưng nếu bạn mở trung tâm thông báo, toàn bộ tin nhắn sẽ ở đó. Nó thậm chí còn kết xuất các ký tự dòng mới \n.


12

BIÊN TẬP:

Cập nhật câu trả lời với thông tin mới nhất

Kích thước tối đa được phép cho tải trọng thông báo tùy thuộc vào API nhà cung cấp bạn sử dụng.

Khi sử dụng giao diện nhị phân cũ, kích thước tải trọng tối đa là 2KB (2048 byte).

Khi sử dụng API nhà cung cấp HTTP / 2, kích thước tải trọng tối đa là 4KB (4096 byte). Đối với thông báo Giao thức thoại qua Internet (VoIP), kích thước tối đa là 5KB (5120 byte)

TRẢ LỜI OLD: Theo tài liệu apple, tải trọng cho iOS 8 là 2 kilobyte (2048 byte) và 256 byte cho iOS 7 trở về trước. (đã xóa liên kết vì đây là tài liệu cũ và hiện đã bị hỏng)

Vì vậy, nếu bạn chỉ gửi văn bản, bạn có sẵn 2028 ký tự (iOS 8+) hoặc 236 (iOS 7-).

Tải trọng thông báo

Mỗi thông báo từ xa bao gồm một tải trọng. Tải trọng chứa thông tin về cách hệ thống sẽ cảnh báo người dùng cũng như mọi dữ liệu tùy chỉnh bạn cung cấp. Trong iOS 8 trở lên, kích thước tối đa được phép cho tải trọng thông báo là 2 kilobyte; Dịch vụ Thông báo Đẩy của Apple từ chối mọi thông báo vượt quá giới hạn này. (Trước iOS 8 và trong OS X, kích thước tải trọng tối đa là 256 byte.)

Nhưng tôi đã thử nghiệm và bạn cũng có thể gửi 2 kilobyte cho các thiết bị iOS 7, ngay cả trong cấu hình sản xuất


Kính gửi downvoter, nếu bạn downvote vì các liên kết bị hỏng, tất cả thông tin đã có ở đây và nó chính xác, liên kết chỉ để tham khảo. Ngoài ra, thật tốt khi bình luận lý do tại sao bạn ủng hộ.
jcesarmobile

10

Dưới đây là một số ảnh chụp màn hình (biểu ngữ, cảnh báo và trung tâm thông báo)

Thông báoẢnh bìaTrung tâm Thông báo


7

Đối với các thông báo từ xa thông thường, kích thước tối đa là 4KB (4096 byte) https://developer.apple.com/l Library / content / documentation / NetworkingI Internet /Conualual / RemoteNotifyingPG / CreatingtheNotificationPayload.html

### iOS giới hạn kích thước là 256 byte, nhưng kể từ khi giới thiệu iOS 8 đã thay đổi thành 2kb!

https://forums.aws.amazon.com/ann.jspa?annID=2626

Với iOS 8, Apple đã giới thiệu các tính năng mới cho phép một số trường hợp sử dụng mới phong phú cho thông báo đẩy trên thiết bị di động - thông báo đẩy tương tác, tiện ích của bên thứ ba và tải trọng lớn hơn (2 KB). Hôm nay, chúng tôi vui mừng thông báo hỗ trợ cho các khả năng đẩy di động mới được công bố với iOS 8. Chúng tôi đang xuất bản Ứng dụng mẫu iOS 8 mới để chứng minh cách các tính năng mới này có thể được triển khai với SNS và cũng đã triển khai hỗ trợ cho tải trọng 2KB lớn hơn.


5

Theo WWDC 713_hd_whats_new_in_ios_notifying. Giới hạn kích thước trước đó là 256 byte cho tải trọng đẩy hiện đã được tăng lên 2 kilobyte cho iOS 8.

Nguồn: http://asciiwwdc.com/2014/simes/713?q=notification#1414.0


@Diziet Xin lỗi, tôi không thể tìm thấy một ghi chú chính thức về điểm đó nhưng nó đã được công bố chính thức trong WWDC cuối cùng. Ngay cả Urban Airship cũng đã công bố nó: Urbanairship.com/blog/2014/07/02/ từ
klefevre

Đây là các slide / video nếu bất cứ ai muốn có một liên kết apple: developer.apple.com/ideo/wwdc/2014 - Tìm kiếm "Thông báo mới trong iOS"
Diziet

@ kl91 Không sao đâu. Không đồng bộ với các bình luận, tôi đã xóa bình luận của mình khi tìm thấy nguồn. Nếu bạn tải xuống bản PDF, nó ở trang 82.
Diziet

1
@ kl94, vậy nếu ứng dụng vẫn hỗ trợ nhắm mục tiêu cho iOS 7, thì giới hạn kích thước 2kB cũng sẽ áp dụng cho thông báo đẩy gửi đến thiết bị iOS 7 chứ? Hoặc câu hỏi là: 2kB mới cho tất cả các thông báo đẩy, bất kể nó nhắm đến nền tảng nào?
Jing

@Jing Chúng tôi có thể lạc quan nghĩ rằng giới hạn kích thước mới sẽ được áp dụng cho mọi nền tảng.
klefevre

1

Apple đẩy sẽ từ chối một chuỗi vì nhiều lý do. Tôi đã thử nghiệm nhiều tình huống khác nhau để phân phối đẩy và đây là cách khắc phục hiệu quả của tôi (bằng python):

#  Apple rejects push payloads > 256 bytes (truncate msg to < 120 bytes to be safe)
if len(push_str) > 120:
    push_str = push_str[0:120-3] + '...'

# Apple push rejects all quotes, remove them
import re
push_str = re.sub("[\"']", '', push_str)

# Apple push needs to newlines escaped
import MySQLdb
push_str = MySQLdb.escape_string(push_str)

# send it
import APNSWrapper
wrapper = APNSWrapper.APNSNotificationWrapper(certificate=...)
message = APNSWrapper.APNSNotification()
message.token(...)
message.badge(1)
message.alert(push_str)
message.sound("default")
wrapper.append(message)
wrapper.notify()

Cảm ơn. Tôi nghĩ rằng điều quan trọng là lý do đằng sau 120, mặc dù vậy - làm thế nào bạn đạt được con số đó? Tuy nhiên, sẽ tốt hơn nếu thực hiện cắt ngắn độ dài sau dấu ngoặc kép và dòng mới, vì đó là đại diện tốt hơn cho độ dài của chuỗi cuối cùng được gửi đến Apple?
Rup

Cảm ơn bình luận của bạn về việc xóa tất cả các trích dẫn, trên iOS 11, nó có một lỗi kỳ lạ khi nó phát ra thông báo nhưng không hiển thị bất cứ điều gì.
Pedro Góes

1

Theo tài liệu Apple cập nhật (kiểm tra ngày trả lời của tôi):

"... Khi sử dụng API nhà cung cấp HTTP / 2, kích thước tải trọng tối đa là 4096 byte. Sử dụng giao diện nhị phân cũ, kích thước tải tối đa là 2048 byte. Dịch vụ thông báo đẩy của Apple (APN) từ chối mọi thông báo vượt quá kích thước tối đa."


1

Tài liệu cập nhật của Apple:

Mỗi thông báo từ xa bao gồm một tải trọng. Tải trọng chứa thông tin về cách hệ thống sẽ cảnh báo người dùng cũng như mọi dữ liệu tùy chỉnh bạn cung cấp. Kích thước tối đa được phép cho tải trọng thông báo tùy thuộc vào API nhà cung cấp bạn sử dụng. Khi sử dụng API nhà cung cấp HTTP / 2, kích thước tải trọng tối đa là 4096 byte . Sử dụng giao diện nhị phân cũ, kích thước tải tối đa là 2048 byte. Dịch vụ thông báo đẩy của Apple (APN) từ chối mọi thông báo vượt quá kích thước tối đa.


0

xem thử nghiệm của tôi ở đây

Tôi có thể gửi tối đa 33 ký tự Trung Quốc và 13 byte giá trị tùy chỉnh.

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.