2011-06-10 150 views

回答

217

警報文本的實際限制沒有記錄在任何地方。 唯一的documentation says是:

在iOS 8的和以後,允許的有效載荷通知的最大尺寸是2千字節; Apple推送通知服務拒絕任何超出此限制的通知。 (在iOS 8和OS X之前,最大有效載荷大小爲256字節。)

這是我可以找到的做一些實驗。

  • 警告:在iOS 7之前,警報顯示限制爲107個字符。更大的消息被截斷,您將在顯示的消息結尾處獲得「...」。 iOS 7的限制似乎增加到235個字符。如果你超過8行,你的消息也會被截斷。
  • 橫幅:橫幅會截斷大約62個字符或2行。
  • 通知中心:通知中心的郵件被截斷大約110個字符或4行。
  • 鎖屏:與通知中心相同。

正如這裏提醒是從官方文檔一個很好的提示:

如果必要的話,iOS的截斷你的信息,使其在每個通知傳遞的風格非常適合;爲了獲得最佳效果,您不應該截斷您的消息。

+8

應該澄清的是,應用內UIAlertView沒有顯示限制;超過一定長度的文本將進入滾動視圖。然而,短信或推送警報可能有107個字符的限制。 – azdev 2011-08-05 18:34:50

+1

並且顯示的文本不受有效負載的限制,因爲當您使用本地化方法時,它不再與1:1匹配。有效負載可能很短,而最終消息可能會更長。問題是關於顯示與有效載荷最大長度沒有嚴格關係的消息。 – Marcin 2014-02-17 11:54:07

+1

我可以發送一個巨大的有效負載到沙箱,它會被髮送,但生產服務器是非常限制的只有256字節,而不是一個字節以上。 – DoctorDbx 2014-07-23 15:52:52

25

它應該是236個字節。就我所知,警報文本的大小沒有限制,但僅限於總有效負載大小。因此,考慮到如果有效載荷是最小的,僅包含警報信息,它應該看起來像:

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

,佔用了20個字符(20個字節),剩下236個字節放警報字符串內。 ASCII碼爲236個字符,而UTF8和UTF16可能較小。

+0

ASCII編碼違反了JSON規範,要求使用UTF-8,UTF-16LE,UTF-16BE,UTF-32LE或UTF-32BE。見http://www.ietf.org/rfc/rfc4627.txt;第4頁。 – 2013-11-15 20:04:34

+11

ASCII是UTF-8的一個子集,因此通過線路傳輸8位ASCII碼始終是安全的。 – 2013-12-11 03:35:04

+0

只是好奇,爲什麼你提到然後**它應該是236個字節。** ..我正在運行截斷問題..如果我計算總字符長度然後它不超過1024個字符,截斷警報消息字符長度是509我收到。截斷響應可能是什麼原因?任何建議! – 2016-09-09 14:54:40

14

增強格式通知的限制是documented here

它明確規定:

有效載荷不得超過256個字節,且不能是空值終止。

ascandroli聲稱above他們能夠發送1400個字符的消息。我使用新的通知格式進行的測試表明,在256字節限制內只有1個字節的消息被拒絕。鑑於文檔是非常明確在這一點上,我建議使用256是安全的,無論您可以實驗性地實現,因爲不能保證Apple將來不會將其更改爲256。

至於警報文本本身,如果您可以將它放入256總有效載荷大小中,那麼它將由iOS顯示。它們截斷出現在狀態欄上的消息,但是如果您打開通知中心,那麼整個消息就在那裏。它甚至呈現換行符\n

+1

開發者網站#404。 – 2016-09-09 14:56:20

+0

斷開的鏈接似乎在archive.org上不可用。不太熟悉iOS,但這可能是一個合適的替代品:https://developer.apple.com/library/prerelease/content/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/LegacyNotificationFormat.html – Leigh 2016-12-02 14:52:23

1

由於各種原因,Apple推送會拒絕一個字符串。我測試了多種用於推送的場景,這是我工作的修復(在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() 
+0

謝謝。不過,我認爲重要的一點是120後面的理由 - 你是如何得到這個數字的?儘管在引號和換行符後面進行長度截斷會更好嗎,因爲這是發送給Apple的最終字符串長度的更好表示方式? – Rup 2014-06-16 08:46:23

+0

感謝您對刪除所有引號的評論,在iOS 11上它有一個奇怪的錯誤,它聽起來像是消息,但沒有顯示任何內容。 – 2017-10-02 14:40:05

0

看到我的測試here

我可以把多達33箇中國字和13個字節的自定義值。

4

根據WWDC 713_hd_whats_new_in_ios_notifications。的256字節用於推有效載荷之前的大小限制現已增加到2千字節爲iOS 8.

來源: http://asciiwwdc.com/2014/sessions/713?q=notification#1414.0

+0

@Diziet對不起,我沒有找到關於這一點的官方說明,但它已在最後的WWDC上正式公佈。即使是城市飛艇也通過它:http://urbanairship.com/blog/2014/07/02/early-access-goodies-for-ios-8-developers – klefevre 2014-09-30 14:30:34

+0

這裏是幻燈片/視頻,如果任何人想要一個蘋果鏈接:https: //developer.apple.com/videos/wwdc/2014/ - 搜索「iOS通知新增內容」 – Diziet 2014-09-30 14:33:26

+0

@ kl91沒關係。與評論不同步的是,當我找到源代碼時,我刪除了我的評論。如果您下載PDF,請參閱第82頁。 – Diziet 2014-09-30 14:34:20

7

對於常規遠程通知,最大尺寸爲4KB( 4096個字節) https://developer.apple.com/library/content/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/CreatingtheNotificationPayload.html

### iOS的大小限制爲256個字節,但由於引進的iOS 8已變更爲2KB!

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

與iOS 8,蘋果推出新的功能,使一些新富 使用案例移動推送通知 - 互動推 通知,第三方小工具,和大(2 KB)的有效載荷。今天, 我們很高興地宣佈支持iOS 8發佈的新功能 。我們正在發佈一款新的iOS 8 示例應用程序,演示如何使用SNS實現這些新功能 ,並且還實施了對更大的2KB有效載荷。

10

編輯:

更新與latest information

最大尺寸的答案允許的通知有效載荷取決於你使用哪個提供商的API。

使用傳統二進制接口時,最大有效負載大小爲2KB(2048字節)。

使用HTTP/2提供程序API時,最大有效負載大小爲4KB(4096字節)。 對於因特網協議語音(VoIP)的通知,則最大大小爲5KB(5120個字節)

OLD解答: 根據蘋果文檔爲iOS 8所述有效載荷爲2千字節(2048個字節)和爲iOS 256個字節7和之前。 (刪除鏈接,因爲它是一箇舊的文檔,現在它已損壞)

所以,如果你只是發送文本,你有2028(iOS 8+)或236(iOS 7-)字符可用。

通知有效載荷

每個遠程通知包括有效載荷。有效負載包含有關係統如何警告用戶以及您提供的任何 定製數據的信息。在iOS 8和更高版本中,通知有效負載允許的最大大小爲 爲2千字節; Apple推送通知 服務拒絕任何超出此限制的通知。 (在此之前的iOS 8和在OS X,最大有效載荷大小爲256個字節。)

但是我測試並且可以發送2千字節到iOS 7裝置也一樣,即使是在生產結構

+0

親愛的downvoter,如果你因爲鏈接被破壞而失望,所有的信息已經在這裏,而且是正確的,鏈接僅供參考。另外,評論你爲什麼不願意評論是很好的。 – jcesarmobile 2017-09-18 13:58:11

10

我這裏還有一些截圖(橫幅,警報,&通知中心)AlertBannerNotification Center

1

根據updated Apple document(檢查我的回答日期):

「...使用HTTP/2提供程序API時,最大有效負載大小爲4096 字節。使用傳統的二進制接口,最大有效載荷大小爲字節。蘋果推送通知服務(的APN)拒絕超過最大尺寸的任何通知 「

1

蘋果更新文件:。

每個遠程通知包括有效載荷的有效載荷包含有關係統應如何提醒信息用戶以及您提供的任何自定義數據通知有效負載允許的最大大小取決於您使用的提供程序API 使用HTTP/2提供程序API時,最大有效負載大小爲4096字節使用傳統二進制接口,最大有效載荷大小爲2048字節Apple推送通知服務(APN)拒絕任何超過最大大小的通知。