ColdFusion/Java APNS-间歇性结果
在使用带有ColdFusion的JavaApple推送通知服务库()测试推送通知时,我遇到了奇怪/断断续续的结果 以下是有效负载字符串的示例:ColdFusion/Java APNS-间歇性结果,java,ios,coldfusion,notifications,Java,Ios,Coldfusion,Notifications,在使用带有ColdFusion的JavaApple推送通知服务库()测试推送通知时,我遇到了奇怪/断断续续的结果 以下是有效负载字符串的示例: {"aps":{"alert":"dsfkjsdlfkjasdlfkjsdlfkjasdlkfjasldfkjasldkfjasdlkfjasldkfjasldkfjasdlkfjasldkfjasdlkfjasdlfkjasdlkfjasdlkfjasldkfjasldkfjasldkfjasldkfjasldkfjasldkfjasldkfjalsd
{"aps":{"alert":"dsfkjsdlfkjasdlfkjsdlfkjasdlkfjasldfkjasldkfjasdlkfjasldkfjasldkfjasdlkfjasldkfjasdlkfjasdlfkjasdlkfjasdlkfjasldkfjasldkfjasldkfjasldkfjasldkfjasldkfjasldkfjalsdkfjlasdkfjaslkdjf"},"ID":"431"}
当我发送带有附加自定义字段和“短”消息文本的通知时,它将通过。样本:
{"ALERTTYPE":"Collection","ID":"427","ALERTVALUE":"50","aps":{"alert":"005 - Source: Eric Dev PC;"}}
但是,当我尝试发送带有“更长”文本的通知时,通知无法通过
例如,我发送了一个通知,其中包含指向集合的链接,消息文本为“004-Source:Eric Dev PC;”,我收到了该通知,但当我发送一个通知,其中包含指向集合的链接,消息文本为“004-Source:Eric Dev PC;Certificate:ABC123;指向集合的链接:Collection 123;”,该通知没有通过。在尝试推送它之前,我检查了“更长”一个上的有效负载,它并不大——158字节(我相信最大值是2048字节)。我还使用istolong()
方法检查有效负载,并使用shrinkBody()
缩短有效负载,以确保有效负载不会太大
{"ALERTTYPE":"Collection","ID":"427","ALERTVALUE":"50","aps":{"alert":"005 - Source: Eric Dev PC; Certificate: ABC123; Link to Collection: Collection 123;"}}
同样,该有效载荷远低于阈值
这是我的密码:
// Create the ApnsService object
LOCAL.ApnsService =
CreateObject("java", "com.notnoop.apns.APNS")
.newService()
.withCert(
VARIABLES.ApnsCertificate["filePath"],
VARIABLES.ApnsCertificate["password"]
)
.withProductionDestination()
.build();
// Start the Apns service
LOCAL.ApnsService.start();
// Set default value for Connection Test status
LOCAL.ConnectionTestSuccess = true;
/*
Test the connection - this will throw an exception if the Apple
servers aren't reachable or the service cannot send
notifications for now (attempt will be made at next scheduled
time)
*/
try {
LOCAL.ApnsService.testConnection();
}
catch (any error){
LOCAL.ConnectionTestSuccess = false;
}
// Connection Test worked, so attempt to send the Notification
if (LOCAL.ConnectionTestSuccess) {
/*
Before attempting to send the push notification, retrieve
and deactivate inactive device tokens to prevent issues
with Apple
*/
deleteInactiveDevices(apnsCert=VARIABLES.ApnsCertificate);
// Retrieve all User Device Tokens for this Push Notification
LOCAL.qUserDeviceTokens = getUserDeviceTokens();
LOCAL.aDeviceTokens =
ListToArray(ValueList(LOCAL.qUserDeviceTokens.DEVICETOKEN));
// Generate a Payload Builder instance
LOCAL.PayloadBuilder =
CreateObject("java", "com.notnoop.apns.APNS")
.newPayload();
// Add the alert body to the payload
LOCAL.PayloadBuilder
.alertBody(Trim(VARIABLES.MessageText));
// Build the Custom Fields object/structure
LOCAL.CustomFields.id = VARIABLES.Id;
// Link to News Article
if (Len(Trim(VARIABLES.NewsArticleId))) {
LOCAL.CustomFields.alertType = "News";
LOCAL.CustomFields.alertValue = Trim(VARIABLES.NewsArticleId);
}
// Link to Collection
else if (Len(Trim(VARIABLES.CollectionId))) {
LOCAL.CustomFields.alertType = "Collection";
LOCAL.CustomFields.alertValue = Trim(VARIABLES.CollectionId);
}
// Link to Search Results
else if (Len(Trim(VARIABLES.SearchText))) {
LOCAL.CustomFields.alertType = "Search";
LOCAL.CustomFields.alertValue = Trim(VARIABLES.SearchText);
}
// Add Custom Fields to the Payload
LOCAL.PayloadBuilder
.customFields(LOCAL.CustomFields);
/*
Shrink the alert body so that the entire payload
string will fit within Apple's byte limit
*/
if (LOCAL.PayloadBuilder.isTooLong()) {
LOCAL.PayloadBuilder
.shrinkBody("...");
}
LOCAL.PayloadJSONString =
LOCAL.PayloadBuilder
.build();
/*
Push the notification through Apple's APNS;
Note: push() accepts a Java Collection and a Java
String. ColdFusion Arrays are already typed as Java
Collections, so there is no need to recast it
*/
LOCAL.Notifications =
LOCAL.ApnsService
.push(
LOCAL.aDeviceTokens,
JavaCast("string", LOCAL.PayloadJSONString)
);
// Stop the Apns service
LOCAL.ApnsService.stop();
快速更新…。我发送了一系列带有额外自定义字段的通知,并一次减少一个消息文本中的字符数。如果消息文本包含32个或更少的字符(有效负载字节长度=107),则它们似乎会通过–更多,并且不会收到通知。似乎很武断…。令人不解……还有问题吗?