didReceiveRemoteNotification:fetchCompletionHandler:从图标打开与推送通知

2024-02-19

我正在尝试实现后台推送通知处理,但在确定用户是否从发送的推送通知打开应用程序而不是从图标打开应用程序时遇到问题。

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {

    //************************************************************
    // I only want this called if the user opened from swiping the push notification. 
    // Otherwise I just want to update the local model
    //************************************************************
    if(applicationState != UIApplicationStateActive) {
        MPOOpenViewController *openVc = [[MPOOpenViewController alloc] init];
        [self.navigationController pushViewController:openVc animated:NO];
    } else {
        ///Update local model
    }

    completionHandler(UIBackgroundFetchResultNewData);
}

使用此代码,无论用户如何打开应用程序,应用程序都会向 MPOOpenViewController 打开。如何才能使视图控制器仅在通过滑动通知打开应用程序时才被推送?

使用相同的代码,这可以在 iOS 6 上运行,但使用新的 iOS 7 方法时,它的行为并不像我想要的那样。

Edit:我现在尝试在 iOS 7 上运行该应用程序,并且我们不支持 iOS 7 之前的任何版本。我在该方法的 iOS 6 版本中使用了相同的代码(没有完成处理程序),它的行为方式如下我希望如此。您只需滑动通知即可调用该通知。如果您从图标打开,则永远不会调用该方法。


好吧,我想通了。该方法实际上被调用两次(一次是在收到推送时,一次是在用户与图标或通知交互时)。

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {

    if(application.applicationState == UIApplicationStateInactive) {

        NSLog(@"Inactive");

        //Show the view with the content of the push

        completionHandler(UIBackgroundFetchResultNewData);

    } else if (application.applicationState == UIApplicationStateBackground) {

        NSLog(@"Background");

        //Refresh the local model

        completionHandler(UIBackgroundFetchResultNewData);

    } else {

        NSLog(@"Active");

        //Show an in-app banner

        completionHandler(UIBackgroundFetchResultNewData);

    }
}

感谢 Tim Castelijns 的以下补充:

注意:它被调用两次的原因是由于有效负载有content_available : 1。如果你remove键及其值,那么它只会在点击时运行。这并不能解决每个人的问题,因为有些人需要该密钥为真

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

didReceiveRemoteNotification:fetchCompletionHandler:从图标打开与推送通知 的相关文章

  • IE8 和怪异模式

    IE8 是否像 IE6 7 一样以怪异模式运行 我有一个网页 其中有一些非常奇怪的代码 内容以填充和负边距居中 它在 IE6 7 和其他浏览器中可以正常工作 但在 IE8 中 内容区域的宽度只有一半并且不居中 怪异模式的标志 源代码在 DO
  • 在 Ruby 中生成 GUID

    我有一个问题 用 GUID 很容易解决 特别是 对于密码重置工作流程 我想将 GUID 令牌发送到用户的电子邮件并让他们使用该令牌重置密码 由于 GUID 是唯一的 因此这非常安全 并且可以避免我通过电子邮件向人们发送密码 这是有风险的 我
  • 如何在 Flutter 中对 RaisingButton 的颜色进行动画处理?

    我有一个RaisedButton 我想要animate它的颜色来自green to red 反之亦然 每次用户单击它时 这怎么能做到呢 您可以使用AnimatedContainer https api flutter dev flutter
  • 检查一个数是否是完全平方数?

    我认为以下代码存在精度问题 bool isPerfectSquare long long n long long squareRootN long long sqrt n 0 5 return squareRootN squareRootN
  • 强制函数调用的顺序?

    假设我有一个抽象基类 并且我想要一个必须由派生类实现的纯虚方法 但我想确保派生方法以特定顺序调用函数 我可以做什么来强制执行它 I E base class virtual void doABC 0 virtual void A 0 vir
  • 从 Ruby 运行 shell 命令:在显示输出时捕获输出?

    我有个问题 我想从另一个 ruby 脚本运行一个 ruby 脚本并捕获它的输出信息 同时让它也输出到屏幕上 runner usr bin env ruby print Enter your password password gets ch
  • Spring 的 LdapTemplate 搜索:PartialResultException:未处理的延续引用;剩余名称 '/'

    我通过 LDAP 为某个使用 spring 制作的应用程序添加用户 虽然这适用于大多数情况 但在某些情况下 它不起作用 检索我使用的用户 public class LdapUserServiceImpl implements ILdapUs
  • Elastic Beanstalk、Bundler 找不到 gem“bundler”的兼容版本

    我已经尝试过将 Elastic Beanstalk 用于 Rails 当我运行 eb deploy 时出现此错误 我需要至少安装bundler 1 8 4 知道如何解决这个问题吗 Bundler could not find compati
  • 在 C# 中使用自定义千位分隔符

    在显示字符串时 我尝试不使用 字符作为千位分隔符 而是使用空格 我想我需要定义一种自定义文化 但我似乎做得不对 有什么指点吗 例如 将 1000000 显示为 1 000 000 而不是 1 000 000 no String Replac
  • 列表框:添加组合框作为项目?

    是否可以将列表框的每个项目都作为组合框 我需要这个 因为我将列表框设置为可检查 然后我需要让用户从列表中每个元素的不同选项中进行选择 Thanks 如果您不打算分发您的应用程序 那么您还可以查看 TreeView 控件 请参阅此示例 COD
  • 如何测试send_file烧瓶

    我有一个小型烧瓶应用程序 它需要上传一些图像并将它们转换为多页 tiff 没什么特别的 但是如何测试多个文件的上传和文件下载呢 我的测试客户端 class RestTestCase unittest TestCase def setUp s
  • CMake 中的 FindSDL2 发生了什么?

    我在游戏中使用 SDL2 我一直使用自定义 FindSDL2 cmake 因为标准 CMake 集中没有 然而 前段时间确实出现了有关 FindSDL2 的帖子 例子 红迪网帖子 https www reddit com r opengl
  • 捕获 SQLAlchemy 异常

    我可以使用什么捕获 SQLAlechmy 异常的上层异常 gt gt gt from sqlalchemy import exc gt gt gt dir exc ArgumentError CircularDependencyError
  • 从外部material-ui组件访问主题

    我有一个使用标准深色主题的主题提供商 我希望能够从我自己的自定义组件访问该主题的详细信息 但我不知道如何做到这一点 在下面的例子中 this props theme未定义 ReactDOM render
  • 在 LP2844Z(Zebra 打印机)上的收据中包含 PNG [重复]

    这个问题在这里已经有答案了 我正在致力于创建一个基于 HTML5 画布的签名 绘图框 目前我们在服务器上将画布保存为PNG 但可以轻松地将base64字符串保存在数据库中 现在的问题是我们如何在打印的收据上添加签名 目前我们使用 GF 字段
  • 如何在不显示父活动的情况下将一个全屏对话框片段替换为另一个全屏对话框片段?

    我有一个使用单个自定义 DialogFragment 类的活动 它的外观是数据驱动的 因此不同的调用看起来可能相当不同 它是 全屏 即 setStyle DialogFragment STYLE NO FRAME android R sty
  • 如何通过API退出Win32应用程序?

    我有一个使用 Win32 API 编写的 C Win32 应用程序 我希望强制它在其中一个函数中退出 有没有类似的东西Exit or Destroy or Abort 类似的东西会终止它吗 哎呀呀呀呀呀呀 不要做任何这些事情 exit 和
  • Vuex store.watch 只接受 Vue routerguard 中的函数

    我正在尝试观察并等待 Vue 路由器防护从 Vuex 获取最终值 但它会抛出异常 vuex store watch 只接受一个函数 这是代码 const isAdmin get store getters user isAdmin unde
  • 创建进程默认浏览器

    我目前正在使用 ShellExecute 打开 在用户浏览器中打开 URL 但在 Win7 和 Vista 中遇到了一些麻烦 因为该程序作为服务运行提升 我想获取线程 id 因此 ShellExecute 无法获取线程 id 因此我开始使用
  • 如何循环遍历颜色数组以更改按键背景(按下/向下)

    互联网 如果这与其他人没有什么关系 请原谅我 但我会将其留在这里 以防这是一个有效的问题 我正在尝试创建一个文本区域字段 其中用户每次按下键 a z 都会触发背景颜色更改 在数组中列出 我一直在用 JQuery 做这件事 我想我已经很接近了

随机推荐

  • 如何忽略“firebase-admin 似乎已安装在不受支持的环境中。”?

    我正在使用 firebase 并正在为我的团队构建一个管理仪表板 仪表板用于向我们的平台添加所有用户都可以看到的内容 起初 我使用 Firebase JS SDK 实现它 并禁用安全规则来测试它 到目前为止一切正常 然后 我尝试使用适用于
  • 如何以编程方式枚举 Azure 订阅和租户?

    如何以编程方式枚举 Azure 订阅和租户 这与我之前的问题有关 NET Azure SDK 中的登录 AzureRmAccount 及相关 等效项 https stackoverflow com questions 44619481 lo
  • 非最大化 matlab GUI 图

    有没有办法创建一个以最大化窗口启动的 GUI 我尝试添加set gcf Units normalized Position 0 0 1 1 在我的图形用户界面的末尾mygui OpeningFcn 功能 但 GUI 未正确最大化 请参阅打印
  • Woocommerce 按属性名称 asc 订购产品

    我在 Woocommerce 中有一个包含产品的自定义页面模板 但我想按属性的术语名称 asc 订购产品 我有三个任期 我不知道正确的方法 我尝试过
  • 无法将本地jar提交到spark集群:java.nio.file.NoSuchFileException

    spark spark 2 1 1 bin hadoop2 7 bin spark submit master spark 192 168 42 80 32141 deploy mode cluster file home me works
  • 如何在 Python 中使用自定义模块的 import 语句

    我对Python编程非常陌生 并且在Windows环境下使用Python 3 3编写简单的helloworld程序 helloworld程序保存为hello py 那么我如何在另一个模块中使用它呢 我尝试了 sys path append
  • 选中哪个单选按钮?

    我想检查哪个单选按钮被选中 然后 在我问这个问题之前 我查看了这里的问题 他们说代码 if document getElementById number1 checked 就是答案 但是 我收到错误 使用未定义的常量文档 假定 文档 并且
  • 流水线 sed 调用和多个 sed 表达式之间的效率有区别吗?

    我有一个关于 bash 中 sed 效率的问题 我有一系列管道化的 sed 语句 例如 var1 Some string of text var2 echo var1 sed s pattern1 replacement1 g sed s
  • 如何在运行时监控某些java方法分配的内存

    我正在创建一个 java 程序 其中我的类假设 A 有一些预定义的行为 但用户可以覆盖我的类来改变其行为 因此 我的脚本将检查是否存在某个子类 而不是我将其称为它的行为 但是如果他在代码中编写了一些阻塞代码或内存泄漏怎么办 这可能会损害我的
  • 在领域迁移期间创建领域对象

    您能够在迁移期间创建领域对象吗 我想要提取现有领域对象的一部分并使用该数据创建一个新对象 但迁移总是挂起 这是我的迁移代码 private class var migrationBlock MigrationBlock return mig
  • 是否可以从 Chromium 扩展中禁用 Flash 插件?

    我知道可以手动禁用 Chromium 中的 Flash 插件 只需转到 chrome plugins 找到 Adobe Flash Player 并将其禁用即可 我想知道是否可以使用 JavaScript 代码或扩展中的任何客户端脚本语言来
  • ASP.NET 图片上传并调整大小

    我有一个 aspx 页面 它将图像从客户端电脑上传到服务器硬盘 但现在我需要更改我的程序 以便我可以在上传时调整图像大小 有人对此有任何想法吗 我无法使用输入文件服务器控件找到此类属性 方法 有人指导我吗 将文件保存到服务器后 您可以使用这
  • Laravel 中的关系和 Blade

    我有 3 个表 如下所述 Table 1 user id username password Name Age Table 2 tasks id task name description Table 3 logs id user id t
  • 重写继承的抽象类中的抽象方法

    好吧 基本上我有以下问题 我试图让一个抽象类继承另一个具有抽象方法的抽象类 但我不想在它们中的任何一个中实现抽象方法 因为第三个类继承了两个类其中 public abstract class Command public abstract
  • 如何分析本机 JNI 库

    如何分析用 C 编写的 Java 本机接口库 我了解常用的 C 分析器 但我的问题是如何分析whole设置包括对 JVM 方法的调用 这可能会减慢程序速度 经过对这里提出的一些方法的一些研究和测试后 我最终使用了sprof 基本上我遵循了可
  • dotnetcore 中的服务结构客户端身份验证 UserPasswordCredential 不起作用

    我正在 aspnetcore dotnetcore2 0 应用程序中构建一个小型服务结构维护 但现在无法识别 UserPasswordCredential 类 从here https github com AzureAD azure act
  • 如何检测设备上是否存在Android Market?

    有些Android设备没有Android Market 例如韩国等 是否可以在运行时检测Android Market的存在 我知道我可以先尝试打开一个市场 uri 看看是否有抛出任何异常 但我认为这不是一个明智的做法 我知道我可以尝试打开一
  • Unicode 代码页 1200 到底是什么?

    在研究一些本地化选项时 我偶然发现它是 Visual Studio 中的保存选项 Unicode 代码页 1200 到底是什么 微软文档页面代码页标识符 https learn microsoft com en us windows win
  • 使用 printf 格式在 C 中打印等宽列

    我想在 C 中使用 printf 打印列 我编写了以下代码 include
  • didReceiveRemoteNotification:fetchCompletionHandler:从图标打开与推送通知

    我正在尝试实现后台推送通知处理 但在确定用户是否从发送的推送通知打开应用程序而不是从图标打开应用程序时遇到问题 void application UIApplication application didReceiveRemoteNotif