我的应用使用GCM接收推送通知。我的Android应用程序完美的工作,当我完全关闭应用程序,我仍然收到通知,但如果我对我的iOS版本做同样的事情,我没有收到任何东西。
注意这当然是在应用程序首次注册然后应用程序关闭之后。我找不到很多关于此的信息。有些帖子说你不能这样做。但Facebook和Facebook的使者都喜欢这样做。有谁知道这是怎么做的?
这是我的
DidReceiveRemoteNotification method which is taken from the GCM documentation
// [START ack_message_reception]
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{
NSLog(@"Notification received: %@", 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]
}
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))handler
{
NSLog(@"Notification received: %@", 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];
handler(UIBackgroundFetchResultNoData);
// [END_EXCLUDE]
}
// [END ack_message_reception]
发送的有效负载看起来像这样
$payload = array('registration_ids' => $Regids,
'content_available' => false,
'notification' => array("body"=> $_POST['message'],
"sound" => "default",
'badge' => '1'
)
);
请注意,如果应用程序位于后台,则此功能
答案 0 :(得分:8)
我设法通过将此添加到我的工资负载
来实现此目的"priority" => "high"
也许有人可以评论为什么这有效,因为我不知道
答案 1 :(得分:2)
当应用程序关闭时,它也适用于iOS - 如果没有,则出现问题。
但是,当用户关闭应用程序时,您无法对iOS使用静默推送(在任务切换器中向上滑动) - 因此,如果您的应用想要在推送时做出反应而用户没有要点击它,你不能在关闭应用程序时这样做。
答案 2 :(得分:2)
我认为您没有在通知有效负载中指定alert
密钥。应用程序关闭时,通知有效负载的alert
键中提供的消息将显示在设备上。
{
"aps" : { "alert" : "Message received from Bob" },
"acme2" : [ "bang", "whiz" ]
}
在上面的有效负载中,检查alert
密钥。当应用关闭时,消息从Bob 收到的消息将显示在iPhone的通知中心。