我使用谷歌云消息在iOS应用程序中接收推送通知。为了了解系统的可靠性,我进行了两次测试。1.在应用程序处于前台时接收通知称为旋度12.在应用程序处于后台时接收通知。iOS主屏幕可见。然后设备被锁定。在下面的中称为卷曲2,3,4
对于这两个测试,我都使用一个终端程序向GCM连续发送10个推送通知。
#!/bin/bash
api_key="MYAPYKEYXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
reg_id="MYREGIDXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
for i in `seq 1 10`;
do
echo "Sending message $i"
curl --header "Authorization: key=$api_key" --header Content-Type:"application/json" https://android.googleapis.com/gcm/send -d "{"registration_ids":["$reg_id"], "data":{"message": "This is $i"}, "content_available":true}"
echo " "
done
我的AppDelegate.swift包含以下代码:对于此测试,我只是将收到的通知记录到控制台。
func application( application: UIApplication,
didReceiveRemoteNotification userInfo: [NSObject : AnyObject]) {
self.log.debug("(userInfo["gcm.message_id"]): type: (userInfo) ")
// This works only if the app started the GCM service
GCMService.sharedInstance().appDidReceiveMessage(userInfo);
// Handle the received message
// [START_EXCLUDE]
NSNotificationCenter.defaultCenter().postNotificationName(messageKey, object: nil,
userInfo: userInfo)
// [END_EXCLUDE]
}
func application( application: UIApplication,
didReceiveRemoteNotification userInfo: [NSObject : AnyObject],
fetchCompletionHandler handler: (UIBackgroundFetchResult) -> Void) {
self.log.debug("(userInfo["gcm.message_id"]): type: (userInfo) ")
// This works only if the app started the GCM service
GCMService.sharedInstance().appDidReceiveMessage(userInfo);
// Handle the received message
// Invoke the completion handler passing the appropriate UIBackgroundFetchResult value
// [START_EXCLUDE]
NSNotificationCenter.defaultCenter().postNotificationName(messageKey, object: nil,
userInfo: userInfo)
// [END_EXCLUDE]
handler(UIBackgroundFetchResult.NewData)
}
// [END ack_message_reception]
curl 1:在应用程序处于活动状态时运行
$ sh gcm-push-curl.sh
Sending message 1
{"multicast_id":7601092806058312069,"success":1,"failure":0,"canonical_ids":0,"results":[{"message_id":"0:1446966587095558%d9588296d9588296"}]}
Sending message 2
{"multicast_id":5909902520187109640,"success":1,"failure":0,"canonical_ids":0,"results":[{"message_id":"0:1446966587866963%d9588296d9588296"}]}
Sending message 3
{"multicast_id":4614499459908171704,"success":1,"failure":0,"canonical_ids":0,"results":[{"message_id":"0:1446966589361277%d9588296d9588296"}]}
Sending message 4
{"multicast_id":8134668915396219272,"success":1,"failure":0,"canonical_ids":0,"results":[{"message_id":"0:1446966590641578%d9588296d9588296"}]}
Sending message 5
{"multicast_id":4784965394490169762,"success":1,"failure":0,"canonical_ids":0,"results":[{"message_id":"0:1446966591587472%d9588296d9588296"}]}
Sending message 6
{"multicast_id":6241530976591223030,"success":1,"failure":0,"canonical_ids":0,"results":[{"message_id":"0:1446966594764987%d9588296d9588296"}]}
Sending message 7
{"multicast_id":8978902798439854756,"success":1,"failure":0,"canonical_ids":0,"results":[{"message_id":"0:1446966595671922%d9588296d9588296"}]}
Sending message 8
{"multicast_id":6283825418645144982,"success":1,"failure":0,"canonical_ids":0,"results":[{"message_id":"0:1446966596474541%d9588296d9588296"}]}
Sending message 9
{"multicast_id":8120719633509436218,"success":1,"failure":0,"canonical_ids":0,"results":[{"message_id":"0:1446966597242071%d9588296d9588296"}]}
Sending message 10
{"multicast_id":8512105467086003642,"success":1,"failure":0,"canonical_ids":0,"results":[{"message_id":"0:1446966597991847%d9588296d9588296"}]}
curl 2:在应用程序处于后台且设备锁定时运行
$sh gcm-push-curl.sh
Sending message 1
{"multicast_id":5588705638430973508,"success":1,"failure":0,"canonical_ids":0,"results":[{"message_id":"0:1446966661606755%d9588296d9588296"}]}
Sending message 2
{"multicast_id":9016701196490961038,"success":1,"failure":0,"canonical_ids":0,"results":[{"message_id":"0:1446966662368880%d9588296d9588296"}]}
Sending message 3
{"multicast_id":8811760824655650118,"success":1,"failure":0,"canonical_ids":0,"results":[{"message_id":"0:1446966664079778%d9588296d9588296"}]}
Sending message 4
{"multicast_id":5409935873727765078,"success":1,"failure":0,"canonical_ids":0,"results":[{"message_id":"0:1446966665050940%d9588296d9588296"}]}
Sending message 5
{"multicast_id":7729732231428218287,"success":1,"failure":0,"canonical_ids":0,"results":[{"message_id":"0:1446966666508932%d9588296d9588296"}]}
Sending message 6
{"multicast_id":8188050074826382607,"success":1,"failure":0,"canonical_ids":0,"results":[{"message_id":"0:1446966667585382%d9588296d9588296"}]}
Sending message 7
{"multicast_id":5913793804137018252,"success":1,"failure":0,"canonical_ids":0,"results":[{"message_id":"0:1446966671009307%d9588296d9588296"}]}
Sending message 8
{"multicast_id":5601975420774004308,"success":1,"failure":0,"canonical_ids":0,"results":[{"message_id":"0:1446966672984512%d9588296d9588296"}]}
Sending message 9
{"multicast_id":8457313732470913239,"success":1,"failure":0,"canonical_ids":0,"results":[{"message_id":"0:1446966673716583%d9588296d9588296"}]}
Sending message 10
{"multicast_id":5371949804462995150,"success":1,"failure":0,"canonical_ids":0,"results":[{"message_id":"0:1446966675441327%d9588296d9588296"}]}
curl 3:在应用程序处于后台并且设备再次锁定时运行
$ sh gcm-push-curl.sh
Sending message 1
{"multicast_id":5557012639197983768,"success":1,"failure":0,"canonical_ids":0,"results":[{"message_id":"0:1446966719944546%d9588296d9588296"}]}
Sending message 2
{"multicast_id":4730409051405748208,"success":1,"failure":0,"canonical_ids":0,"results":[{"message_id":"0:1446966724620582%d9588296d9588296"}]}
Sending message 3
{"multicast_id":5530580902639958686,"success":1,"failure":0,"canonical_ids":0,"results":[{"message_id":"0:1446966725438291%d9588296d9588296"}]}
Sending message 4
{"multicast_id":9111474059722223027,"success":1,"failure":0,"canonical_ids":0,"results":[{"message_id":"0:1446966727055882%d9588296d9588296"}]}
Sending message 5
{"multicast_id":7841377277124478181,"success":1,"failure":0,"canonical_ids":0,"results":[{"message_id":"0:1446966728970341%d9588296d9588296"}]}
Sending message 6
{"multicast_id":5594543271725809615,"success":1,"failure":0,"canonical_ids":0,"results":[{"message_id":"0:1446966730800067%d9588296d9588296"}]}
Sending message 7
{"multicast_id":8685309308966690464,"success":1,"failure":0,"canonical_ids":0,"results":[{"message_id":"0:1446966731640101%d9588296d9588296"}]}
Sending message 8
{"multicast_id":8859997925201491765,"success":1,"failure":0,"canonical_ids":0,"results":[{"message_id":"0:1446966735618351%d9588296d9588296"}]}
Sending message 9
{"multicast_id":8830947759563422702,"success":1,"failure":0,"canonical_ids":0,"results":[{"message_id":"0:1446966737433853%d9588296d9588296"}]}
Sending message 10
{"multicast_id":5660703487823801785,"success":1,"failure":0,"canonical_ids":0,"results":[{"message_id":"0:1446966738664391%d9588296d9588296"}]}
curl 4:在应用程序处于后台时运行,设备再次锁定
$sh gcm-push-curl.sh
Sending message 1
{"multicast_id":4866730914828951532,"success":1,"failure":0,"canonical_ids":0,"results":[{"message_id":"0:1446967658074261%d9588296d9588296"}]}
Sending message 2
{"multicast_id":8385741491167809594,"success":1,"failure":0,"canonical_ids":0,"results":[{"message_id":"0:1446967658837166%d9588296d9588296"}]}
Sending message 3
{"multicast_id":7340882174172500805,"success":1,"failure":0,"canonical_ids":0,"results":[{"message_id":"0:1446967660847155%d9588296d9588296"}]}
Sending message 4
{"multicast_id":8822097918345564456,"success":1,"failure":0,"canonical_ids":0,"results":[{"message_id":"0:1446967661759583%d9588296d9588296"}]}
Sending message 5
{"multicast_id":9155633918940805212,"success":1,"failure":0,"canonical_ids":0,"results":[{"message_id":"0:1446967662891127%d9588296d9588296"}]}
Sending message 6
{"multicast_id":8374566084159111686,"success":1,"failure":0,"canonical_ids":0,"results":[{"message_id":"0:1446967663658639%d9588296d9588296"}]}
Sending message 7
{"multicast_id":5062396269674637650,"success":1,"failure":0,"canonical_ids":0,"results":[{"message_id":"0:1446967664476061%d9588296d9588296"}]}
Sending message 8
{"multicast_id":5632447549491506026,"success":1,"failure":0,"canonical_ids":0,"results":[{"message_id":"0:1446967665191507%d9588296d9588296"}]}
Sending message 9
{"multicast_id":5582459520681321352,"success":1,"failure":0,"canonical_ids":0,"results":[{"message_id":"0:1446967665936985%d9588296d9588296"}]}
Sending message 10
{"multicast_id":7328958609399996860,"success":1,"failure":0,"canonical_ids":0,"results":[{"message_id":"0:1446967668825005%d9588296d9588296"}]}
结果:
卷曲1之后
2015-11-08 08:09:47.718 [Debug] [main] [AppDelegate.swift:206] application(_:didReceiveRemoteNotification:fetchCompletionHandler:) > Optional(0:1446966587095558%d9588296d9588296): type: [aps: {
"content-available" = 1;
}, message: This is 1, gcm.message_id: 0:1446966587095558%d9588296d9588296]
2015-11-08 08:09:48.434 [Debug] [main] [AppDelegate.swift:206] application(_:didReceiveRemoteNotification:fetchCompletionHandler:) > Optional(0:1446966587866963%d9588296d9588296): type: [aps: {
"content-available" = 1;
}, message: This is 2, gcm.message_id: 0:1446966587866963%d9588296d9588296]
2015-11-08 08:09:49.973 [Debug] [main] [AppDelegate.swift:206] application(_:didReceiveRemoteNotification:fetchCompletionHandler:) > Optional(0:1446966589361277%d9588296d9588296): type: [aps: {
"content-available" = 1;
}, message: This is 3, gcm.message_id: 0:1446966589361277%d9588296d9588296]
2015-11-08 08:09:51.401 [Debug] [main] [AppDelegate.swift:206] application(_:didReceiveRemoteNotification:fetchCompletionHandler:) > Optional(0:1446966590641578%d9588296d9588296): type: [aps: {
"content-available" = 1;
}, message: This is 4, gcm.message_id: 0:1446966590641578%d9588296d9588296]
2015-11-08 08:09:52.222 [Debug] [main] [AppDelegate.swift:206] application(_:didReceiveRemoteNotification:fetchCompletionHandler:) > Optional(0:1446966591587472%d9588296d9588296): type: [aps: {
"content-available" = 1;
}, message: This is 5, gcm.message_id: 0:1446966591587472%d9588296d9588296]
2015-11-08 08:09:55.397 [Debug] [main] [AppDelegate.swift:206] application(_:didReceiveRemoteNotification:fetchCompletionHandler:) > Optional(0:1446966594764987%d9588296d9588296): type: [aps: {
"content-available" = 1;
}, message: This is 6, gcm.message_id: 0:1446966594764987%d9588296d9588296]
2015-11-08 08:09:56.317 [Debug] [main] [AppDelegate.swift:206] application(_:didReceiveRemoteNotification:fetchCompletionHandler:) > Optional(0:1446966595671922%d9588296d9588296): type: [aps: {
"content-available" = 1;
}, message: This is 7, gcm.message_id: 0:1446966595671922%d9588296d9588296]
2015-11-08 08:09:57.036 [Debug] [main] [AppDelegate.swift:206] application(_:didReceiveRemoteNotification:fetchCompletionHandler:) > Optional(0:1446966596474541%d9588296d9588296): type: [aps: {
"content-available" = 1;
}, message: This is 8, gcm.message_id: 0:1446966596474541%d9588296d9588296]
2015-11-08 08:09:57.855 [Debug] [main] [AppDelegate.swift:206] application(_:didReceiveRemoteNotification:fetchCompletionHandler:) > Optional(0:1446966597242071%d9588296d9588296): type: [aps: {
"content-available" = 1;
}, message: This is 9, gcm.message_id: 0:1446966597242071%d9588296d9588296]
2015-11-08 08:09:58.569 [Debug] [main] [AppDelegate.swift:206] application(_:didReceiveRemoteNotification:fetchCompletionHandler:) > Optional(0:1446966597991847%d9588296d9588296): type: [aps: {
"content-available" = 1;
}, message: This is 10, gcm.message_id: 0:1446966597991847%d9588296d9588296]
卷曲2之后
2015-11-08 08:11:05.404 [Debug] [main] [AppDelegate.swift:206] application(_:didReceiveRemoteNotification:fetchCompletionHandler:) > Optional(0:1446966661606755%d9588296d9588296): type: [aps: {
"content-available" = 1;
}, message: This is 1, gcm.message_id: 0:1446966661606755%d9588296d9588296]
2015-11-08 08:11:07.286 [Debug] [main] [AppDelegate.swift:206] application(_:didReceiveRemoteNotification:fetchCompletionHandler:) > Optional(0:1446966662368880%d9588296d9588296): type: [aps: {
"content-available" = 1;
}, message: This is 2, gcm.message_id: 0:1446966662368880%d9588296d9588296]
2015-11-08 08:11:10.109 [Debug] [main] [AppDelegate.swift:206] application(_:didReceiveRemoteNotification:fetchCompletionHandler:) > Optional(0:1446966664079778%d9588296d9588296): type: [aps: {
"content-available" = 1;
}, message: This is 3, gcm.message_id: 0:1446966664079778%d9588296d9588296]
卷曲3之后
2015-11-08 08:12:16.960 [Debug] [main] [AppDelegate.swift:206] application(_:didReceiveRemoteNotification:fetchCompletionHandler:) > Optional(0:1446966730800067%d9588296d9588296): type: [aps: {
"content-available" = 1;
}, message: This is 6, gcm.message_id: 0:1446966730800067%d9588296d9588296]
2015-11-08 08:12:18.698 [Debug] [main] [AppDelegate.swift:206] application(_:didReceiveRemoteNotification:fetchCompletionHandler:) > Optional(0:1446966731640101%d9588296d9588296): type: [aps: {
"content-available" = 1;
}, message: This is 7, gcm.message_id: 0:1446966731640101%d9588296d9588296]
2015-11-08 08:12:22.159 [Debug] [main] [AppDelegate.swift:206] application(_:didReceiveRemoteNotification:fetchCompletionHandler:) > Optional(0:1446966735618351%d9588296d9588296): type: [aps: {
"content-available" = 1;
}, message: This is 8, gcm.message_id: 0:1446966735618351%d9588296d9588296]
### 30 seconds later...
2015-11-08 08:20:57.287 [Debug] [main] [AppDelegate.swift:206] application(_:didReceiveRemoteNotification:fetchCompletionHandler:) > Optional(0:1446966738664391%d9588296d9588296): type: [aps: {
"content-available" = 1;
}, message: This is 10, gcm.message_id: 0:1446966738664391%d9588296d9588296]
卷曲4之后
2015-11-08 08:27:41.779 [Debug] [main] [AppDelegate.swift:206] application(_:didReceiveRemoteNotification:fetchCompletionHandler:) > Optional(0:1446967658074261%d9588296d9588296): type: [aps: {
"content-available" = 1;
}, message: This is 1, gcm.message_id: 0:1446967658074261%d9588296d9588296]
2015-11-08 08:27:43.798 [Debug] [main] [AppDelegate.swift:206] application(_:didReceiveRemoteNotification:fetchCompletionHandler:) > Optional(0:1446967658837166%d9588296d9588296): type: [aps: {
"content-available" = 1;
}, message: This is 2, gcm.message_id: 0:1446967658837166%d9588296d9588296]
2015-11-08 08:27:49.739 [Debug] [main] [AppDelegate.swift:206] application(_:didReceiveRemoteNotification:fetchCompletionHandler:) > Optional(0:1446967662891127%d9588296d9588296): type: [aps: {
"content-available" = 1;
}, message: This is 5, gcm.message_id: 0:1446967662891127%d9588296d9588296]
正如您所看到的,当设备被锁定时,并不是所有的通知都会被接收。但有些人,有些人来晚了(第三卷第10名)。
我不知道该怎么办,因为一般都会收到通知。
我希望你们中有人有任何想法。
最佳西蒙
第1版:我查看了一次日志,发现从未调用过func application( application: UIApplication,
didReceiveRemoteNotification userInfo: [NSObject : AnyObject])
。
GCM在应用程序不在前台时使用APN传递消息。APN不保证通知送达。
重要提示:发送通知是"尽最大努力",而不是保证。它不打算将数据传递到您的应用程序,仅用于通知用户存在可用的新数据。
我认为,在应用程序不在的情况下,通过APN发送可用的背靠背消息是前景,就像你在测试中所做的那样,会导致消息丢失。也许延迟更长的测试会减少丢弃的消息。
如果您的消息具有高优先级,请考虑将消息的优先级值设置为高,但前提是该消息需要像聊天消息一样的用户交互。