问题标签 [remote-notifications]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
362 浏览

ios - 我应该在收到有效负载后更新我的应用程序吗?或者我应该总是通过允许它自己下载来更新它?

当您的 iPhone 收到 WhatsApp/Telegram 推送通知时,例如

问题1:应用程序是否必须自行下载/接收。那就是手机上弹出的横幅必须自己下载+我的Whatsapp / Telegram必须自己再次下载?

我的朋友回复:

推送通知可以将消息作为有效负载。您的应用程序可以提取它并动态插入对话,而无需发出额外的请求——我以前做过。让人感觉快了很多。不利的一面是,您不能保证推送会以正确的顺序(或根本没有)到达。

但我不相信,从语义的角度来看,推送通知不应该真正更新您的应用程序本身。如果他们这样做,那将是一种滥用......他们应该只通知您的应用程序有更新,然后允许您通过下载任何可用的新内容自己进行更新。

因此,为了看看顶级公司和他们的应用程序是否在应用我朋友的建议,我对 3 个应用程序(Gmail、WhatsApp、Telegram)做了一个小实验:

我关闭了 Wifi,但保持蜂窝数据打开,然后我还禁用了应用程序使用蜂窝数据的访问权限。

在此处输入图像描述

然后我有人给我发了一条消息/电子邮件:这是我的结果:

电报::我收到一个警报(有发件人+第一行)。但是一旦我打开应用程序(或点击通知),它就没有我的新消息或任何东西。

但是,如果允许 Telegram 访问互联网……它会在后台下载消息……也就是说,如果我遵循以下顺序:我是 wifi 或没有互联网限制的蜂窝数据 --> 收到通知 --> 转互联网完全关闭,然后转到应用程序:我会在那里看到完整的消息/正文。

Gmail:我收到一条警报(有主题/发件人/正文的预览)但是一旦我打开应用程序,它就没有我的新消息或任何东西。

如果允许 Gmail 应用程序访问互联网……那么与 Telegram 相反:只有在打开应用程序本身之前,它才会下载/更新 Gmail 中的电子邮件。我猜 Gmail 没有content-available设置为,1但 Telegram 已设置为1

WhatsApp:我什么也没得到。

收到通知后不会发生任何交互......只有当应用程序正在下载自己时才会发生。

我的结论是:

收到通知后不会发生任何交互......只有当应用程序独立于有效负载到达时下载自己时才会发生。

Gmail 和 Telegram 正在进行冗余下载,基本上对我朋友的建议不够聪明,或者没有收到电子邮件/消息的风险太大,最好是安全的:thinking_face:

问题2:这个结论正确吗?

0 投票
2 回答
105 浏览

php - ios上的远程通知

我正在尝试从自己的 php 服务器向应用程序发送远程通知。

这是 AppDelefate.m 中的代码:

当我运行该应用程序时,它会在接受后要求通知权限。控制台打印以下令牌:

所以我在我的 PHP 服务器中使用这个令牌进行测试:

当我运行此 PHP 代码时,它会打印以下内容:

但是我的应用程序什么也没收到。请帮助我找出我的代码中缺少的内容。谢谢。

0 投票
2 回答
385 浏览

ios - 在 iOS 中处理聊天应用程序的远程通知

背景

我正在构建一个聊天消息应用程序,当用户接收来自发件人的消息时,我遇到了处理推送通知的问题。

我想要达到的目标

就像Whatsapp一样,在我收到推送通知并打开飞行模式后,我仍然可以在打开应用程序时看到消息内容。所以,我相信它在收到通知时已经收到了消息。

问题

当用户通过主屏幕上的图标打开应用程序而不是在通知上按下或执行其他操作时,我找不到处理远程聊天消息推送通知的好方法。

我尝试了什么

当应用程序出现时,我手动加载了消息,但这与 Whatsapp 上的测试行为不同。我尝试了这个第三方套接字库,但是一旦应用程序关闭,iOS就会终止监听服务,它不适用于我想要构建的内容。

我的问题

如果仍在使用推送通知或后台模式远程通知,那么当应用程序未运行时,是否有任何方法能够处理推送通知?

我还了解了 Apple PushKit,我不确定这是否仅适用于提供 VoIP 的应用程序。如果我仅将 PushKit 用于文本消息传递,有谁知道 Apple 是否会接受将我的应用程序发布到他们的 AppStore?

不切实际的问题,Whatsapp 怎么能做到这一点?它也使用 PushKit 吗?

0 投票
1 回答
1526 浏览

ios - OneSignal (iOS) - 未调用 didReceiveNotificationRequest

我按照 OneSignal 的设置指南,添加了一个名称正确的扩展名,并提供了他们提供的这个文件:

还复制了他们在此处的设置指南中概述的 AppDelegate 的所有代码: https ://documentation.onesignal.com/docs/ios-sdk-setup以及一些其他代码来创建 github 上有人推荐的“中心”变量。在 AppDelegate 中添加此实例确实可以调用“didReceiveRemoteNotification”,但不会调用 didReceiveNotificationExtensionRequest。

我需要“didReceiveNotificationExtensionRequest”,因为我正在尝试使用 iOS 10 的可变内容功能。我已经设置了断点,并且确信 didReceiveNotificationExtensionRequest 永远不会被调用,我想知道我是否需要在其他地方连接该类,因为 .m 文件从不做任何事情。任何帮助表示赞赏

如果重要的话,我的手机运行的是 ios 10.0(所以应该支持可变内容)并且 OneSignal 版本是(2.5.4)谢谢

0 投票
0 回答
91 浏览

ios - 当包含应用程序根本没有运行时,如何从 iOS 扩展更新 Watch 应用程序

我有一个 iOS 应用程序和操作扩展程序,它们通过应用程序组通用的 UserDefaults 共享数据。

当用户使用操作扩展添加模型数据,并且 iOS 应用程序在后台时,我可以使用 KVO 观察有问题的 UserDefaults 键,并启动 Watch 应用程序的后台刷新 - 这很有效。

但是,如果应用程序不在后台,而是完全处于非活动状态怎么办?KVO 显然不会发生。iOS 应用程序将在下次启动时(手动或通过后台刷新)获取对 UserDefaults 的更改并将这些更改传播到手表,但与此同时,手表数据在下一次刷新之前是不同步的。

我能想到解决这个问题的唯一方法是让 Action Extension 启动一个远程、静默通知推送到 iOS 应用程序,然后对手表进行后台刷新。但这似乎有点……重手?通过网络访问位于同一设备上的应用程序及其扩展程序。

我缺少什么解决方案?

0 投票
1 回答
110 浏览

ios - 为什么当我使用 UIApplicationLaunchOptionsLocalNotificationKey 接收远程通知时它会起作用?

当我尝试获取远程通知时,我犯了一个错误,即使用UIApplicationLaunchOptionsLocalNotificationKey字典LaunchingOptions的键来获取信息。但这一切都适用于我真正的 iPhone(10.2)。

在此处输入图像描述

我可以点击远程通知来启动我的应用程序。这是为什么?

0 投票
2 回答
254 浏览

cloudkit - 如何从来自 fetchAllSubscriptionsWithCompletionHandler 的 CKSubscriptionID 中检索 CKRecord?

谢谢你的建议!

我正在使用 fetchAllSubscriptionsWithCompletionHandler,并且在发送推送通知后,我确实看到了每个 CKSubscription 的订阅 ID。如何从订阅 ID 中检索 CKRecord?

我没有看到来自创建的 CKReference 的远程推送通知。我可以通过 CloudKit DashBoard 查看 CKRecord 及其相关记录。我确实在创建父记录时收到推送通知,但在子记录上创建 CKReference 时没有收到推送通知。

下面的代码在应用程序启动时运行,前提是有 Internet 连接:

0 投票
3 回答
16182 浏览

ios - 应用程序关闭时的 IOS 通知

我有一个 ios 应用程序,我在从服务器发送通知时向其中发送远程通知我正在设置内容 -available = 1声音 =“” 当我在 IOS 设备上使用时

应用程序(didReceiveRemoteNotification:fetchCompletionHandler :)

我看到该应用程序在后台时到达此方法,但是当应用程序关闭时,此方法没有被调用但是在应用程序关闭时没有被调用

应用程序(didReceiveRemoteNotification:fetchCompletionHandler :)

我在这个方法中的处理程序是

那么即使应用程序关闭,我应该改变什么才能运行此方法

谢谢

0 投票
1 回答
4005 浏览

ios - iOS 10:在后台接收远程通知

我正在实施 FCM 推送通知。

当应用程序处于前台时,我会收到通知。
但我没有在后台收到通知。

在服务器端,我设置了 content-available => true

在 iOS 10 上,我应该实施任何其他方法还是从哪里获得后台通知?

PHP 服务器有效负载代码:

0 投票
0 回答
308 浏览

ios - UNNotificationServiceExtension 有时不显示图像

我创建了UNNotificationServiceExtension在通知中显示远程附件的子类。随机,附件不显示。

问题难以重现,但一些用户反映,在收到带有图像附件的远程通知后,他们看不到图像。经过一番调试,我曾经遇到过这个问题。我注意到downloadTask()有空locationresponse状态码是200

此外,error变量包含:

似乎附件已正确获取,但URLSession丢失location了已获取附件的 url。我不知道这个问题的原因是什么。

我在真机 iPhone 6S Plus、iOS 10.3.3 上进行了测试。

有没有人有类似的问题?有什么建议我会做错什么吗?