如何发送多行的 Apple 推送通知,即带有 '\n' 字符?

Posted

技术标签:

【中文标题】如何发送多行的 Apple 推送通知,即带有 \'\\n\' 字符?【英文标题】:How can I send an Apple Push Notification with multiple lines i.e. with a '\n' character?如何发送多行的 Apple 推送通知,即带有 '\n' 字符? 【发布时间】:2011-10-09 21:56:49 【问题描述】:

我想知道如何发送多行的苹果推送通知消息。使用 '\n' 似乎不起作用。

类似:

第一行

第二行

现在它似乎完全忽略了这条消息。

【问题讨论】:

ios 似乎忽略了错误编码的消息,而 android 显示它们的代码不完整。 【参考方案1】:

你不能通过转义发送多行推送,它不起作用!

只是尝试使用 Parse 发送推送:

有效载荷没有转义:

 "alert": "Send me\na push without escape", "sound": "default" 

结果:

带有转义的有效载荷

 "alert": "Send me\\na push with escape", "sound": "default" 

结果:

【讨论】:

嗨,Johnny,我正在尝试使用 APNSwrapper 发送推送通知。但是设备上没有任何反应。从进口APNSWrapper *#mylocal_DeviceToken = 'e0cf72eaaf87ef73be7a9687a5eb16caaae8da63' mylocal_PushMagic = '9B6A010D-52C0-477C-9C67-59CCE8AB77A2' 包装= APNSNotificationWrapper( 'PushCert.pem',假)消息= APNSNotification()message.tokenBase64( '5755bfa7297b765cd03fdc6f47a137ef1e9126ef')#message .token(mylocal_DeviceToken) message.badge(5) message.appendProperty(APNSProperty('mdm', mylocal_PushMagic)) wrapper.append(message) wrapper.notify() 请帮忙【参考方案2】:

添加一个可本地化的字符串文件并在那里添加您的字符串。例如,你可以有类似的东西:

"Push_String" = "My push string with a line break\n and argument: %@";

现在在您的通知负载中,使用 loc-key 和 loc-args 属性,例如:

"loc-key":"Push_String","loc-args":["My argument!"]

现在您的通知中应该有一个换行符。

【讨论】:

【参考方案3】:

对字符串使用双引号,例如:

string = "first line  \r\n Second line ";

【讨论】:

在 iOS 12 中为我工作。我猜 \r 是回车。【参考方案4】:

我在 php 中使用 chr(10) 来发送换行符作为推送消息的一部分,例如。

$message = "Hey user_firstname! " . chr(10) . "you have a new message!"

【讨论】:

这适用于我在 iOS 上使用 One Signal 进行最终交付。 也适用于 firebase,即使使用 $text = str_replace('\n', chr(10), $text);【参考方案5】:

我想通了:esacpae \n。呵呵。

所以使用:

First line \\n
Second Line

而不是

First line \n
Second Line

【讨论】:

这不应该被否决。当最终的 JSON 字符串包含 \\n 时,它确实有效。请记住,您的编程语言可能已经为您执行了该转换,因此如果您还有再次转义反斜杠的逻辑,那将导致问题。【参考方案6】:

这里有你想知道的解决方案!

第一行 \r\n 第二行

【讨论】:

【参考方案7】:

Apple push 会出于多种原因拒绝一个字符串。我测试了各种推送交付场景,这是我的工作修复(在 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()

【讨论】:

【参考方案8】:

你可以试试:

alert:"this is 1st line \\n"

【讨论】:

【参考方案9】:

也许您正在寻找的是subtitle 属性。见Multi line title in push notification for iOS

【讨论】:

【参考方案10】:

If your payload have "\\n" do this:

首先像这样解析你的有效载荷

title = First line \nSecond Line //either \n or \\n
title = title.replacingOccurrences(of: "\\\\n", with: "\n", options: .regularExpression)

最好的解决方案是让你的有效载荷“\n”或“\r\n”

【讨论】:

以上是关于如何发送多行的 Apple 推送通知,即带有 '\n' 字符?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用标准 C#.NET 发送带有“apns-expiration”标头的推送通知?

如何向 Apple 和 Android 发送推送通知?

PHP:如何向 Apple 设备发送推送通知

使用 Twilio 发送 Apple 静默推送通知

我们如何跟踪从 IBM MobileFirst 7.0 发送到 Apple APNS 服务器的推送通知?

如何使用 Apple 推送通知播放自定义声音?