根据这些(以及更多)关于SO的问题:
我想出了静音推送通知的主要键和方法
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
在后台调用的是:有效载荷,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,Parse作为推送通知提供商。
答案 0 :(得分:0)
我能够通过尝试不同的有效负载组合来解决我的问题,结果就是这个:
class A():
a1 = []
x = A()
y = A()
x.a1.append("test")
x.a1, y.a1
(['test'], ['test'])
class B():
b1 = None
def __init__(self):
self.b1 = list()
r = B()
s = B()
r.b1.append("test")
r.b1, s.b1
(["test"], [])
看起来像' aps'必须在'数据'阵列。现在,app delegate方法正在后台调用,我可以看到" content-available = 1"在Xcode控制台中。