草庐IT

ios - 当 iOS 设置中的通知发生更改时,Amazon SNS 如何禁用/重新启用设备?

coder 2023-09-12 原文

我在基于 swift 的 iOS 应用程序中使用 Amazon SNS 进行移动推送通知和 AWS SDK。一切正常,但是当我从 iOS 设置禁用通知然后在设置中的应用程序条目下关闭通知时,我注意到一些奇怪的行为。如果我关闭通知,AWS SNS 控制台上的启用标志仍设置为 true

在某些情况下,启用标志会正确翻转为false。在这些情况下,当我尝试在 iOS 设置中重新启用通知时,已启用标志将从不翻转回true。知道为什么会这样吗?无论如何,有没有办法实时适本地设置它?

提前致谢。

最佳答案

Amazon SNS与设备之间没有交互,SNS只与平台提供商(GCM、APNS、百度、WMS等)交互

端点在 Amazon SNS 中可能因多种原因而被禁用:

  1. 设备 token 已更改您尚未使用新 token 更新端点。在这种情况下,推送通知将失败到此设备,因为当前端点 token 无效。根据 APNS 反馈,端点将被设置为 DISABLED。如果发生以下情况,设备 token 可能会发生变化:

    • 应用版本升级,i
    • iOS 版本升级,或
    • 可能会在设备重置时出现。

这里的建议是通过将新获得的 token 与保存在 NSUserDefaults 存储中的 token 进行匹配,来验证您的应用程序在启动时所做的 token 更改,如果不同,则在更新 SNS 端点后在本地更新它。

这可能就是为什么当您在设备设置中重新启用通知时,“已启用的标志将永远翻转回 true”。

  1. 设备所有者已删除该应用程序,并且在未安装该应用程序时,会向设备发送 SNS 通知。此时,APNS 提供无效 token 的反馈,端点被 SNS 禁用。由于禁用端点的 APNS 回调的异步性质,这最多可能需要 24 小时。

  2. SNS 通知发送到端点时带有不是为应用程序或环境生成的 token 。例如,端点是手动生成的,是 64 位长度的有效十六进制字符的随机组合。

  3. 如果带有有效 token 的 SNS 通知被无意中发送到应用程序的 SANDBOX (APNS_SANBOX) 环境。在这种情况下,SNS 接受 token 但在第一次推送通知时失败,端点将根据 APNS 反馈被禁用。

blog post Rohan 分享的是移动 token 管理的重要资源。

关于ios - 当 iOS 设置中的通知发生更改时,Amazon SNS 如何禁用/重新启用设备?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35870055/

有关ios - 当 iOS 设置中的通知发生更改时,Amazon SNS 如何禁用/重新启用设备?的更多相关文章

  1. ruby - 如何使用 Nokogiri 的 xpath 和 at_xpath 方法 - 2

    我正在学习如何使用Nokogiri,根据这段代码我遇到了一些问题:require'rubygems'require'mechanize'post_agent=WWW::Mechanize.newpost_page=post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')puts"\nabsolutepathwithtbodygivesnil"putspost_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div

  2. ruby - 如何从 ruby​​ 中的字符串运行任意对象方法? - 2

    总的来说,我对ruby​​还比较陌生,我正在为我正在创建的对象编写一些rspec测试用例。许多测试用例都非常基础,我只是想确保正确填充和返回值。我想知道是否有办法使用循环结构来执行此操作。不必为我要测试的每个方法都设置一个assertEquals。例如:describeitem,"TestingtheItem"doit"willhaveanullvaluetostart"doitem=Item.new#HereIcoulddotheitem.name.shouldbe_nil#thenIcoulddoitem.category.shouldbe_nilendend但我想要一些方法来使用

  3. ruby - 使用 RubyZip 生成 ZIP 文件时设置压缩级别 - 2

    我有一个Ruby程序,它使用rubyzip压缩XML文件的目录树。gem。我的问题是文件开始变得很重,我想提高压缩级别,因为压缩时间不是问题。我在rubyzipdocumentation中找不到一种为创建的ZIP文件指定压缩级别的方法。有人知道如何更改此设置吗?是否有另一个允许指定压缩级别的Ruby库? 最佳答案 这是我通过查看ruby​​zip内部创建的代码。level=Zlib::BEST_COMPRESSIONZip::ZipOutputStream.open(zip_file)do|zip|Dir.glob("**/*")d

  4. ruby - 其他文件中的 Rake 任务 - 2

    我试图在一个项目中使用rake,如果我把所有东西都放到Rakefile中,它会很大并且很难读取/找到东西,所以我试着将每个命名空间放在lib/rake中它自己的文件中,我添加了这个到我的rake文件的顶部:Dir['#{File.dirname(__FILE__)}/lib/rake/*.rake'].map{|f|requiref}它加载文件没问题,但没有任务。我现在只有一个.rake文件作为测试,名为“servers.rake”,它看起来像这样:namespace:serverdotask:testdoputs"test"endend所以当我运行rakeserver:testid时

  5. ruby-on-rails - Ruby net/ldap 模块中的内存泄漏 - 2

    作为我的Rails应用程序的一部分,我编写了一个小导入程序,它从我们的LDAP系统中吸取数据并将其塞入一个用户表中。不幸的是,与LDAP相关的代码在遍历我们的32K用户时泄漏了大量内存,我一直无法弄清楚如何解决这个问题。这个问题似乎在某种程度上与LDAP库有关,因为当我删除对LDAP内容的调用时,内存使用情况会很好地稳定下来。此外,不断增加的对象是Net::BER::BerIdentifiedString和Net::BER::BerIdentifiedArray,它们都是LDAP库的一部分。当我运行导入时,内存使用量最终达到超过1GB的峰值。如果问题存在,我需要找到一些方法来更正我的代

  6. ruby-on-rails - Ruby on Rails 迁移,将表更改为 MyISAM - 2

    如何正确创建Rails迁移,以便将表更改为MySQL中的MyISAM?目前是InnoDB。运行原始执行语句会更改表,但它不会更新db/schema.rb,因此当在测试环境中重新创建表时,它会返回到InnoDB并且我的全文搜索失败。我如何着手更改/添加迁移,以便将现有表修改为MyISAM并更新schema.rb,以便我的数据库和相应的测试数据库得到相应更新? 最佳答案 我没有找到执行此操作的好方法。您可以像有人建议的那样更改您的schema.rb,然后运行:rakedb:schema:load,但是,这将覆盖您的数据。我的做法是(假设

  7. python - 如何使用 Ruby 或 Python 创建一系列高音调和低音调的蜂鸣声? - 2

    关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。

  8. ruby-on-rails - Rails 3 中的多个路由文件 - 2

    Rails2.3可以选择随时使用RouteSet#add_configuration_file添加更多路由。是否可以在Rails3项目中做同样的事情? 最佳答案 在config/application.rb中:config.paths.config.routes在Rails3.2(也可能是Rails3.1)中,使用:config.paths["config/routes"] 关于ruby-on-rails-Rails3中的多个路由文件,我们在StackOverflow上找到一个类似的问题

  9. ruby-on-rails - 如何验证 update_all 是否实际在 Rails 中更新 - 2

    给定这段代码defcreate@upgrades=User.update_all(["role=?","upgraded"],:id=>params[:upgrade])redirect_toadmin_upgrades_path,:notice=>"Successfullyupgradeduser."end我如何在该操作中实际验证它们是否已保存或未重定向到适当的页面和消息? 最佳答案 在Rails3中,update_all不返回任何有意义的信息,除了已更新的记录数(这可能取决于您的DBMS是否返回该信息)。http://ar.ru

  10. ruby-openid:执行发现时未设置@socket - 2

    我在使用omniauth/openid时遇到了一些麻烦。在尝试进行身份验证时,我在日志中发现了这一点:OpenID::FetchingError:Errorfetchinghttps://www.google.com/accounts/o8/.well-known/host-meta?hd=profiles.google.com%2Fmy_username:undefinedmethod`io'fornil:NilClass重要的是undefinedmethodio'fornil:NilClass来自openid/fetchers.rb,在下面的代码片段中:moduleNetclass

随机推荐