我已经实现了静默推送通知,但我注意到了一些奇怪的行为.静默推送通知通过以下方式处理:
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
Run Code Online (Sandbox Code Playgroud)
如果设备正在充电(即连接电缆)和/或我的应用程序是前台,则似乎只接收静音推送消息.
如果我断开设备与充电器(或Mac)的连接,则除非应用程序是前台,否则不再接收静音推送通知.
在这两种情况下,我都会得到非静音推送通知.
如果我再次插入USB电缆,那么无论应用程序是前景还是后台,我都会收到预期的行为并收到静音推送通知.
我正在使用UILocalNotification,所以我知道收到了什么.
连接设备一切正常的事实表明我的静音推送通知配置正确,并且应用程序具有在plist中设置的正确背景模式等.
在iPhone 5s,6和iPad 2上都可以重复此行为,所有这些都运行IOS 8或8.1.
还有其他人经历过这个吗?它应该很容易重现.为什么将设备插入充电器的简单行为会改变接收静音推送通知的能力?
iphone background apple-push-notifications ios silent-notification
push-notification apple-push-notifications ios remote-notifications silent-notification
在我的设置标签栏中:
我认为更好的解决方案是发送静默推送通知,我可以使用它来进行API调用,以便在需要时更新设置UI.
但如果用户已禁用推送通知,我仍会收到静音推送吗?处理此类情况的推荐方法是什么?
notifications objective-c push-notification ios silent-notification
我在敲我的头。我正在实施推送通知。一切正常(收到推送,更新徽章),但在 iOS 13.3 下,应用程序在后台时不会调用方法 application(_:didReceiveRemoteNotification:fetchCompletionHandler:) 。如果应用程序在前台或使用 iOS 12 设备,则调用该方法。我通过以下方式注册推送通知:
[[UNUserNotificationCenter currentNotificationCenter] requestAuthorizationWithOptions:(UNAuthorizationOptionBadge | UNAuthorizationOptionSound | UNAuthorizationOptionAlert) completionHandler:^(BOOL granted, NSError * _Nullable error) {
if (granted) {
dispatch_async(dispatch_get_main_queue(), ^{
[[UIApplication sharedApplication] registerForRemoteNotifications];
});
}
}];
Run Code Online (Sandbox Code Playgroud)
有效载荷设置为以下
{"aps": {
"badge": 10,
"alert": "test",
"content-available": 1
}}
Run Code Online (Sandbox Code Playgroud)
我尝试在所有变体中添加“远程通知”和“后台处理”作为应用程序功能(仅“远程通知”/“后台处理”,没有任何这些功能,启用两者)而没有任何更改。我为 UNUserNotificationCenter 设置了委托,但同样没有成功。我相应地设置了标题:
curl -v \
-H 'apns-priority: 4' \
-H 'apns-topic: xx.xxxxx.xxxx' \
-H 'apns-push-type: alert' \
-H 'Content-Type: application/json; charset=utf-8' \
-d '{"aps": {"badge": 10,"alert": "test", "content-available":1}}' \
--http2 \
--cert pushcert.pem \
https://api.sandbox.push.apple.com/3/device/1234567890 …
Run Code Online (Sandbox Code Playgroud) objective-c apple-push-notifications ios silent-notification ios13
我的应用程序从服务器静默远程通知的挂起模式唤醒,正如我想要的那样.此服务器发送带有" content-available:1" 的推送通知,该通知执行该作业.
现在我想在没有服务器帮助的情况下这样做,所以我想在将来的某个时间发送静音本地通知(来自应用程序)(比如15分钟后),但找不到设置的方法内容可供选择:1" .所以我最终得到的本地通知并没有唤醒我的应用程序,因为我可以使用远程通知.
我搜索了一些信息,我所能找到的只是交互式通知的示例,以及如何设置标题,正文,警报和触发器(基于位置,日期等).但没有关于如何设置内容可用属性.
那么,是否可以为本地通知设置内容?
apple-push-notifications ios localnotification silent-notification
目的是发送仅带徽章值的推送通知,而不发送任何其他内容(无横幅).
我集成了解析sdk以测试推送通知并发送此推送通知
{
"alert" :"",
"badge" :"787",
"Content-available" : "1",
"sound" : ""
}
Run Code Online (Sandbox Code Playgroud)
所以推送通知在应用程序处于后台,前台和应用程序被杀时发送.用徽章阀78在推送通知到达时擦除一些数据的目的成功.我发送了与"Content-available"相同的通知:删除了"1",但是之前一切正常.
我对"内容可用"的理解是,将其值设置为1将允许推送通知而没有警报值.
所以我很困惑,或者我想知道这个推送通知JSon中"Content-available"的含义.
谢谢
push-notification apple-push-notifications ios silent-notification
我正在尝试使用此API发送无声通知(我的意思是托盘中不会显示通知) :
但是当我没有设置正文密钥时,我得到了这个错误:
{
"error": {
"code": 400,
"message": "body parameter is invalid or empty.: 'Body' cannot be null."
}
}
Run Code Online (Sandbox Code Playgroud)
所以我的问题是,如果有一种方法在Android中发送静默通知(在ios我知道有内容可用标志)
Tnx提前!
android push-notification silent-notification visual-studio-app-center
当您的iPhone收到WhatsApp/Telegram推送通知时,例如
wife:
"buy pizza"
Run Code Online (Sandbox Code Playgroud)
问题1:应用程序是否必须自行下载/接收.这是手机上弹出的横幅必须为自己下载+我的Whatsapp/Telegram必须再次自行下载?
我的朋友回答说:
推送通知可以将消息作为有效负载.您的应用可以提取并动态插入到对话中而无需另外请求 - 我之前已经这样做了.让它感觉更加快捷.缺点是您不能保证推送将以正确的顺序(或根本没有)到达.
但我不相信,从语义的角度来看,推送通知不应该真正更新你的应用程序.如果他们这样做将是一种滥用......他们应该只通知您的应用程序更新,然后允许您通过下载任何已提供的新内容来自行更新.
因此,要查看顶级公司及其应用是否正在应用我的朋友建议我使用3个应用(Gmail,WhatsApp,Telegram)进行了一些实验:
然后我有人给我发了一条消息/电子邮件:这是我的结果:
电报::我收到警报(发件人+第一行).但是一旦我打开应用程序(或点击通知),它就没有我的新消息或任何东西.
但是,如果允许Telegram访问互联网...它会在后台下载消息...即如果我遵循以下顺序:我是wifi或没有互联网限制的蜂窝数据 - >收到通知 - >转互联网完全关闭,但然后转到应用程序:我会在那里看到完整的消息/正文.
Gmail:我收到提醒(有预览主题/发件人/正文)但是一旦我打开应用程序,它就没有我的新消息或任何东西.
如果Gmail应用程序被允许访问互联网......那么与Telegram相反:只有在打开应用程序本身之前,它才会下载/更新Gmail中的电子邮件.我猜Gmail没有content-available
设置,1
但Telegram设置为1
WhatsApp:我什么都没得到.
没有互动发生在接到通知......这只有当应用程序被下载情况本身.
我的结论是:
没有互动发生在接到通知......这只有当应用程序被下载情况本身独立于有效载荷的到来.
Gmail和Telegram正在进行冗余下载,基本上不够智能,我的朋友建议或者没有收到电子邮件/消息的风险太大,最好安全一点:thinking_face:
问题2:这个结论是否正确?
apple-push-notifications ios swift remote-notifications silent-notification
使用 Xcode 13.0、iOS 15 SDK 构建应用程序时,iOS 15 设备中未收到 APNS 内容可用推送。
推送有效负载数据,内容可用:1 不工作
{"aps":{"content-available":1},"update":"2|1"}
Run Code Online (Sandbox Code Playgroud)
但通知消息推送正常
{"aps":{"alert":"welcome"}}
Run Code Online (Sandbox Code Playgroud)
iOS 15静默推送消息的标头字段中是否有任何有效负载或配置?
payload apple-push-notifications silentpush silent-notification ios15
目前,我可以使用应用程序委托的didReceiveRemoteNotification
方法接收静默推送。
该方法已被弃用,根据此方法,我们应该切换到UNUserNotificationCenter
的willPresent
方法,但我似乎无法使其在无声推送中起作用。既然没有任何提示可以在无声推送中显示,那么至少可以这样说是不合常理的。
已经阅读了有关推送Xcode 8的注册,不带通知的CKSub以及其他很多东西,但是一切都回到了不推荐的方法。
我们是否应该使用其他方法进行静默推送(这不是面向用户的通知,但在这种情况下,它CKQuerySubscription
是触发后台活动的报告)?还是应该willPresent
为无声推送工作(在这种情况下,我错过了配置的一部分...)?
提前致谢。
apple-push-notifications swift cksubscription unusernotificationcenter silent-notification
在测试向我的应用程序发送静默通知(一个在有效负载中具有“内容可用”:1 的通知)时,我注意到,在设备重新启动后,不会发送通知。如果应用程序在后台或前台运行,则发送相同的有效负载有效,但在设备重新启动后,我没有收到didReceiveRemoteNotification:
回调AppDelegate
。
这在 iOS 13 和 iOS 12 上都会发生
ios ×8
ios13 ×2
objective-c ×2
swift ×2
android ×1
background ×1
ios15 ×1
iphone ×1
payload ×1
silentpush ×1