草庐IT

ios - Swift 3 - 关闭角标(Badge)、警报、声音

coder 2023-09-10 原文

我在这里阅读了很多答案,但我找不到这个问题的答案 如何在应用程序未运行时停止通知中的角标(Badge)、警报和声音? 如何在应用程序处于后台时停止通知中的角标(Badge)、警报和声音?

在这个函数中:

func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void)

我已经将 completionHandler([]) 设置为没有 [.badge, .alert, .sound] 并且当应用程序运行时我仍然会在后台收到通知。

我的代码中还有一个功能,当有人向你打字时发送通知,当你在应用程序中时你看到他正在向你打字,但是当应用程序未运行时你会收到带有角标(Badge)警报声音的通知?如何预防?

PHP 代码:

$body['aps'] = array(
    'content-available' => 0,
    'typingNewMessage' => 'true',
    'senderId' => $your_id
    );

最佳答案

首先要注意两件事:您是否在应用程序中使用 websocket/socket.io 进行聊天?至于通知,您是否在后台模式下设置了远程通知?

后台模式。

阅读 docs for push notifications ,这听起来像是您要在此处添加步骤,或者缺少一些步骤。基本上正如 kathayatnk 提到的,他的方法应该给你你想要的。所以如果你还没有激活远程后台通知:

To configure your app to process silent notifications in the background

  1. In the Project Navigator, select your project.
  2. In the editor, select your iOS app target.
  3. Select the Capabilities tab.
  4. Enable the Background Modes capability.
  5. Enable the Remote notifications background mode.

如果这样做了,你应该在后台接收到它们..

此外,您使用错误的方法在后台接收后台通知。如上面同一链接所述:

In iOS, the system delivers silent notifications by calling the application:didReceiveRemoteNotification:fetchCompletionHandler: method of your app delegate. Use that method to initiate any download operations needed to fetch new data.

我通常如何使用它:

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 非常高效且更快。处理两者会使事情变得非常复杂。坚持套接字方法,并使用一种方法服务器端来检查用户是否仍在应用程序中。类似于 here 之类的乒乓球方法.当套接字客户端 ping 方法显示用户已离开应用程序或已关闭应用程序时,让该方法切换到 APNS 传送。这意味着,如果用户仍在应用程序中,但不在对话中,请继续使用 ping 方法,但对 UI 响应进行不同的编程(以 FB Messenger 或 Snapchat 的通知选项卡为例)。

如果您没有使用 websockets/socket.io:

...切换到 websockets 技术或包(取决于您的服务器平台类型)或 socket.io或使用 firebase realtime chat services .

让我知道你的设置,就像我之前问的那样,但如果你已经做了所有这些但仍然遇到问题,那么请发布你的代码。

个人而言,我用过RawWenderlicht一年多的 APNS 指南,如果你问我的话,这是好东西。

关于ios - Swift 3 - 关闭角标(Badge)、警报、声音,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44490391/

有关ios - Swift 3 - 关闭角标(Badge)、警报、声音的更多相关文章

  1. ruby - 如何验证 IO.copy_stream 是否成功 - 2

    这里有一个很好的答案解释了如何在Ruby中下载文件而不将其加载到内存中:https://stackoverflow.com/a/29743394/4852737require'open-uri'download=open('http://example.com/image.png')IO.copy_stream(download,'~/image.png')我如何验证下载文件的IO.copy_stream调用是否真的成功——这意味着下载的文件与我打算下载的文件完全相同,而不是下载一半的损坏文件?documentation说IO.copy_stream返回它复制的字节数,但是当我还没有下

  2. Ruby 文件 IO 定界符? - 2

    我正在尝试解析一个文本文件,该文件每行包含可变数量的单词和数字,如下所示:foo4.500bar3.001.33foobar如何读取由空格而不是换行符分隔的文件?有什么方法可以设置File("file.txt").foreach方法以使用空格而不是换行符作为分隔符? 最佳答案 接受的答案将slurp文件,这可能是大文本文件的问题。更好的解决方案是IO.foreach.它是惯用的,将按字符流式传输文件:File.foreach(filename,""){|string|putsstring}包含“thisisanexample”结果的

  3. ruby - 如何关闭 ruby​​ gem "Spreadsheet?"中的文件 - 2

    下面的代码在我第一次运行它时就可以正常工作:require'rubygems'require'spreadsheet'book=Spreadsheet.open'/Users/me/myruby/Mywks.xls'sheet=book.worksheet0row=sheet.row(1)putsrow[1]book.write'/Users/me/myruby/Mywks.xls'当我再次运行它时,我会收到更多消息,例如:/Library/Ruby/Gems/1.8/gems/spreadsheet-0.6.5.9/lib/spreadsheet/excel/reader.rb:11

  4. 屏幕录制为什么没声音?检查这2项,轻松解决 - 2

    相信很多人在录制视频的时候都会遇到各种各样的问题,比如录制的视频没有声音。屏幕录制为什么没声音?今天小编就和大家分享一下如何录制音画同步视频的具体操作方法。如果你有录制的视频没有声音,你可以试试这个方法。 一、检查是否打开电脑系统声音相信很多小伙伴在录制视频后会发现录制的视频没有声音,屏幕录制为什么没声音?如果当时没有打开音频录制,则录制好的视频是没有声音的。因此,建议在录制前进行检查。屏幕上没有声音,很可能是因为你的电脑系统的声音被禁止了。您只需打开电脑系统的声音,即可录制音频和图画同步视频。操作方法:步骤1:点击电脑屏幕右下侧的“小喇叭”图案,在上方的选项中,选择“声音”。 步骤2:在“声

  5. Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting - 2

    1.错误信息:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:requestcanceledwhilewaitingforconnection(Client.Timeoutexceededwhileawaitingheaders)或者:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:TLShandshaketimeout2.报错原因:docker使用的镜像网址默认为国外,下载容易超时,需要修改成国内镜像地址(首先阿里

  6. ruby-on-rails - 在 Flash 警报 Rails 3 中显示错误消息 - 2

    如果我在模型中设置验证消息validates:name,:presence=>{:message=>'Thenamecantbeblank.'}我如何让该消息显示在闪光警报中,这是我迄今为止尝试过的方法defcreate@message=Message.new(params[:message])if@message.valid?ContactMailer.send_mail(@message).deliverredirect_to(root_path,:notice=>"Thanksforyourmessage,Iwillbeintouchsoon")elseflash[:error]

  7. ruby-on-rails - Ruby 的 'open_uri' 是否在读取或失败后可靠地关闭套接字? - 2

    一段时间以来,我一直在使用open_uri下拉ftp路径作为数据源,但突然发现我几乎连续不断地收到“530抱歉,允许的最大客户端数(95)已经连接。”我不确定我的代码是否有问题,或者是否是其他人在访问服务器,不幸的是,我无法真正确定谁有问题。本质上,我正在读取FTPURI:defself.read_uri(uri)beginuri=open(uri).readuri=="Error"?nil:urirescueOpenURI::HTTPErrornilendend我猜我需要在这里添加一些额外的错误处理代码...我想确保我采取一切预防措施来关闭所有连接,这样我的连接就不是问题所在,但是我

  8. ruby - 为什么不能使用类IO的实例方法noecho? - 2

    print"Enteryourpassword:"pass=STDIN.noecho(&:gets)puts"Yourpasswordis#{pass}!"输出:Enteryourpassword:input.rb:2:in`':undefinedmethod`noecho'for#>(NoMethodError) 最佳答案 一开始require'io/console'后来的Ruby1.9.3 关于ruby-为什么不能使用类IO的实例方法noecho?,我们在StackOverflow上

  9. ruby - Faye WebSocket,关闭处理程序被触发后重新连接到套接字 - 2

    我有一个super简单的脚本,它几乎包含了FayeWebSocketGitHub页面上用于处理关闭连接的内容:ws=Faye::WebSocket::Client.new(url,nil,:headers=>headers)ws.on:opendo|event|p[:open]#sendpingcommand#sendtestcommand#ws.send({command:'test'}.to_json)endws.on:messagedo|event|#hereistheentrypointfordatacomingfromtheserver.pJSON.parse(event.d

  10. Ruby SSL 错误 - sslv3 警报意外消息 - 2

    我正在尝试在ruby​​脚本中连接到服务器https://www.xpiron.com/schedule。但是,当我尝试连接时:require'open-uri'doc=open('https://www.xpiron.com/schedule')我收到以下错误消息:OpenSSL::SSL::SSLError:SSL_connectreturned=1errno=0state=SSLv2/v3readserverhelloA:sslv3alertunexpectedmessagefrom/usr/local/lib/ruby/1.9.1/net/http.rb:678:in`conn

随机推荐