【问题标题】:Is my payload malformed to call didReceiveRemoteNotification in background?我的有效负载是否在后台调用 didReceiveRemoteNotification 格式错误?
【发布时间】:2015-10-21 09:07:14
【问题描述】:

根据关于 SO 的这些(以及更多)问题:

我发现,静音推送通知和方法的主要键

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler


要在后台调用的是:payload,iOS 版本 > iOS 7,启用“远程通知”的后台模式,并在
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
方法中注册推送通知。

我做了所有这些事情,但是上面提到的应该在后台调用的方法只在应用程序处于前台时才被调用。这就是我在 php 中形成有效载荷的方式:

$contents = json_encode(array(
            'aps'   => array(
                'content-available' => '1',
                'sound' => '',
                'alert' => '',
            ),
            'where' => array(
                'deviceType'    => array(
                '$in'   =>  array('ios', 'android'),
                ),
            ),
            'data'  => array(
                'title' => $this->subject,
                'msg'   => $this->message,
                'date'  => date('d.m.Y H:i', time() + (60 * 60 * 2)),
                'key'   => APPKEY,
                'ids'   => $ids,
            ),

        ));

这就是我在 Xcode 控制台中得到的,因为当应用程序处于前台时,我能够 NSLog 有效负载:

{
    aps =     {
    };
    date = "21.10.2015 11:01";
    ids =     (
        259,
        257,
        256,
    );
    key = xpy3fq4t3wn9;
    msg = test11;
    title = aatest1;
}

我做错了什么?为什么 Xcode 控制台中没有“content-available = 1”?或者还有什么其他原因导致 appDelegate 方法没有在后台被调用?

我使用 iOS 8.1.3,解析为推送通知提供程序。

【问题讨论】:

    标签: php ios json parse-platform push-notification


    【解决方案1】:

    我能够通过尝试不同的有效负载组合来解决我的问题,最终得到了这个:

    $contents = json_encode(array(
    
                'where' => array(
                    'deviceType'    => array(
                    '$in'   =>  array('ios', 'android'),
                    ),
                ),
                'data'  => array(
                    'title' => $this->subject,
                    'msg'   => $this->message,
                    'date'  => date('d.m.Y H:i', time() + (60 * 60 * 2)),
                    'key'   => APPKEY,
                    'ids'   => $ids,
                    'aps'   => array(
                         'content-available'    => '1',
                         'sound'    => '',
                         'alert' => '',
                     ),
                ),
    
            ));
    

    看起来“aps”必须在“data”数组中。现在正在后台调用应用程序委托方法,我可以在 Xcode 控制台中看到“content-available = 1”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多