使用GCM关闭应用程序时在iOS中接收推送通知

时间:2015-12-07 09:13:10

标签: ios push-notification google-cloud-messaging

我的应用使用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'
                                          )
                  );

请注意,如果应用程序位于后台,则此功能

3 个答案:

答案 0 :(得分:8)

我设法通过将此添加到我的工资负载

来实现此目的
"priority" => "high"

也许有人可以评论为什么这有效,因为我不知道

答案 1 :(得分:2)

当应用程序关闭时,它也适用于iOS - 如果没有,则出现问题。

但是,当用户关闭应用程序时,您无法对iOS使用静默推送(在任务切换器中向上滑动) - 因此,如果您的应用想要在推送时做出反应而用户没有要点击它,你不能在关闭应用程序时这样做。

答案 2 :(得分:2)

我认为您没有在通知有效负载中指定alert密钥。应用程序关闭时,通知有效负载的alert键中提供的消息将显示在设备上。

{
    "aps" : { "alert" : "Message received from Bob" },
    "acme2" : [ "bang",  "whiz" ]
}

在上面的有效负载中,检查alert密钥。当应用关闭时,消息从Bob 收到的消息将显示在iPhone的通知中心。