[英]Swift 3 - Turn off badge, alert, sound
我在这里阅读了很多答案,我找不到这些问题的答案如何在应用程序未运行时停止通知的徽章,警报和声音? 如何在应用程序处于后台时停止通知中的徽章,警报和声音?
在这个功能:
func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void)
我把completionHandler([])放在没有[.badge,.alert,.sound]的情况下,当我运行应用程序时,我仍然会在后台收到通知。
此外,我的代码中还有一个函数,当有人给你打字时你会发出通知,当你在应用程序中时,你看到他正在给你打字,但是当你没有运行应用程序时,你会收到带有徽章警报声的通知吗? 怎么预防?
PHP代码:
$body['aps'] = array(
'content-available' => 0,
'typingNewMessage' => 'true',
'senderId' => $your_id
);
首先要做的两件事:您是否在应用中使用websocket / socket.io进行聊天? 至于通知,您是否在后台模式中设置了远程通知?
背景模式。
阅读推文通知的文档 ,听起来你在这里添加了一些步骤,或者遗漏了一些。 基本上提到kathayatnk,他的方法应该给你你想要的。 因此,如果您尚未激活远程后台通知:
配置应用以在后台处理静默通知
- 在Project Navigator中,选择您的项目。
- 在编辑器中,选择您的iOS应用目标。
- 选择“功能”选项卡。
- 启用后台模式功能。
- 启用远程通知后台模式。
如果这样做,你应该在后台收到它们。
此外,您使用错误的方法在后台接收背景通知..如上面相同的链接所述:
在iOS中,系统通过调用应用程序提供静默通知:didReceiveRemoteNotification : fetchCompletionHandler :应用程序委托的方法。 使用该方法启动获取新数据所需的任何下载操作。
我通常如何使用它:
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
guard let aps = userInfo["aps"] as? [String:Any] else {
//handle something here..
return
}
//handle the content here...
}
您还可以通过使用completionHandler的返回值来执行此处的非活动状态的后台任务。 我建议你也读一读。
对于你的聊天问题......
澄清你是如何表现的......
如果您使用的是websocket / socket.io架构:
我强烈建议在使用websocket时不要使用通知来通知用户任何有APNS的内容。 Websockets非常高效且速度更快。 处理两者都会使事情变得复杂。 坚持使用套接字方法,并使用方法服务器端检查用户是否仍在应用程序中。 像这里的乒乓球方法。 当套接字客户端ping方法显示用户已离开应用程序或已关闭应用程序时,请将该方法切换到APNS传递。 这意味着,如果用户仍然在应用程序中但不在对话中,则保持ping方法,但以不同的方式编写UI响应(例如,使用FB Messenger或Snapchat的通知选项卡)。
如果你没有使用websockets / socket.io:
...切换到websockets技术或包(取决于您的服务器平台类型)或socket.io或使用firebase实时聊天服务 。
让我知道你的设置就像我之前提到的那样,但是如果你已经完成所有这些并且仍然遇到问题,那么就发布你的代码。
Personnaly,我已经使用RawWenderlicht为APNS指南超过一年,如果你问我好东西。
对于silent
push notification
, payload
应包含content-available
密钥,如下所示:
{
"aps": {
"content-available": 1
}
}
此外,您需要在Xcode
项目的Capabilities
设置下在Background Modes
下启用Remote Notifications
。
现在,当您的app will wake up in the background
收到其中一个push notifications
时,它将app will wake up in the background
。
didReceiveRemoteNotification
将在被称为AppDelegate
只要push notification
被接收。
func application(
_ application: UIApplication,
didReceiveRemoteNotification userInfo: [AnyHashable : Any],
fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void)
{
let aps = userInfo["aps"] as! [String: AnyObject]
if aps["content-available"] as? Int == 1
{
//Your code
}
}
有关如何处理前台/后台推送通知的更多信息,请参阅: https : //www.raywenderlich.com/156966/push-notifications-tutorial-getting-started
您可以在发送推送时添加静默推送通知(适当地设置内容可用密钥),如下所示。
//when you want the badge and sound
aps {
content-available: 1
}
//When you want silent notifications
aps {
content-available: 0
}
这将调用适当的委托方法,但不会显示徽章和声音
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.