【问题标题】:GCM Push Notifications are not coming on iPhone when app is not active for one day当应用程序一天不活动时,GCM 推送通知不会出现在 iPhone 上
【发布时间】:2017-06-07 08:28:00
【问题描述】:

在 iPhone/iPad 上安装应用后,应用可以第一时间收到通知。一旦应用程序处于非活动状态,它就会停止在前台和后台收到通知。

有人可以指出,我错过了什么。自从我第一次收到以来,消息格式似乎没有问题。

服务器代码:

            message.put("priority", "high");
            message.put("content_available",true);
            if (to != null)
            {
                message.put("to", to.replace("\\", ""));
            }
            if (messageId != null)
            {
                message.put("message_id", messageId);
            }
            JSONObject subobj = new JSONObject();
            subobj.put("sound", "default");
            message.put("notification", subobj);

            message.put("data", payload);
            if (timeToLive != null)
            {
                message.put("time_to_live", timeToLive);
            }
            if (delayWhileIdle != null && delayWhileIdle)
            {
                message.put("delay_while_idle", true);
            }
            if (collapseKey != null)
            {
                message.put("collapse_key", collapseKey);
            }
            message.put("delivery_receipt_requested", true);

客户代码:

     - (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions

{

// First run Delete keychain

if (![[NSUserDefaults standardUserDefaults] objectForKey:@"FirstRun"]) {
    // Delete values from keychain here

    application.applicationIconBadgeNumber = 0;

    [self resetKeychain];
    [[NSUserDefaults standardUserDefaults] setValue:@"1strun" forKey:@"FirstRun"];
    [[NSUserDefaults standardUserDefaults] synchronize];
}

self.viewController = [[MainViewController alloc] init];


CGRect screenBounds = [[UIScreen mainScreen] bounds];

#if __has_feature(objc_arc)
    self.window = [[UIWindow alloc] initWithFrame:screenBounds];
#else
   self.window = [[[UIWindow alloc] initWithFrame:screenBounds] 
autorelease];
#endif
self.window.autoresizesSubviews = YES;
//notification

[self updateDurationLabel];
UIFont *font = [UIFont boldSystemFontOfSize:10.0f];
NSDictionary *attributes = [NSDictionary dictionaryWithObject:font forKey:NSFontAttributeName];
[self.segFromStyle setTitleTextAttributes:attributes forState:UIControlStateNormal];
[self.segToStyle setTitleTextAttributes:attributes forState:UIControlStateNormal];

[self flowManager];


UILocalNotification *remoteNotification = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
if (remoteNotification) {
    application.applicationIconBadgeNumber = 0;
    self.launchNotification = remoteNotification.userInfo;

    NSLog(@"NotificationCheck: remoteNotification");

}

UILocalNotification *localNotification = [launchOptions objectForKey:UIApplicationLaunchOptionsLocalNotificationKey];

if (localNotification) {
    application.applicationIconBadgeNumber = 0;
    NSLog(@"NotificationCheck: localNotification");

    self.launchNotification = localNotification.userInfo;

    NSData* jsonData = [NSJSONSerialization dataWithJSONObject:localNotification.userInfo options:0 error:nil];
    NSString* jsonString = [[NSString alloc] initWithBytes:[jsonData bytes] length:[jsonData length] encoding:NSUTF8StringEncoding];

    NSLog(@"Dict:%@", jsonString);
      }
[self.window makeKeyAndVisible];

return YES;

}

【问题讨论】:

    标签: google-cloud-messaging apple-push-notifications


    【解决方案1】:

    您可以参考此thread,其中建议将"priority": "high" 添加到JSON 以在后台获取通知。

    {
      "to" : "token...",
      "priority": "high",
      "notification" : {
        "title": "GCM TITLE",
        "body" : "FROM GCM",
        "badge": "1",
        "sound": "default"
      }
    }
    

    其他参考资料:

    【讨论】:

    • 感谢您的回复。我确实已经设置了 priority 和 content_available 标志。 [message.put("优先级", "高"); message.put("content_available",true);] 代码中唯一缺少的标志是'badge',让我试试运气。
    猜你喜欢
    • 2016-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-10
    • 1970-01-01
    • 2020-09-08
    • 1970-01-01
    相关资源
    最近更新 更多