当前位置: 首页 > 知识库问答 >
问题:

检测应用程序是否通过单击应用程序图标或通过推送通知启动(当应用程序被用户强制关闭时)

徐丰茂
2023-03-14

在iOS13测试中,我仍然发现很难检测应用程序是从应用图标启动还是从推送通知启动。

我知道我们可以通过以下方式检查启动选项中是否存在通知密钥:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    if (launchOptions != nil) {
         // Launched from push notification
         NSDictionary *notification = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];

    }
}

问题是,当我启动应用程序时,我发现“UIApplicationLaunchotionsRemoteNotificationKey”甚至会出现,单击应用程序图标,在通知面板中显示一个挂起的通知(应用程序被强制关闭)。只有当我清除面板中的通知,然后按app图标启动app时,“UIApplicationLaunchotionsRemoteNotificationKey”不在那里。

在这种情况下,不管我是从app图标还是通知启动,UIApplicationLaunchotionsRemoteNotificationKey仍然是三个,所以我无法区分是应该将app重定向到推送内容还是作为正常流启动。

我听说有些人说,如果“DidReceiveRemotenotification”是从通知中启动的,它将在“DidFinishLaunchingWithOptions”之后调用,但是,在我的例子中,它没有,在两种情况下,只调用“DidFinishLaunchingWithOptions”。

在iOS 13中,当应用程序被杀死时,有没有人遇到同样的问题?如有任何帮助将不胜感激,谢谢。

共有1个答案

微生令
2023-03-14

只需添加以下检查

if (notification != nil) {
    // do your action
}

此外,要检查数据,请添加alertview,您将在其中打印通知数据。

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Test" 
                                                    message:notification 
                                                    delegate:self 
                                                    cancelButtonTitle:@"OK" 
                                                    otherButtonTitles:nil];
[alert show];

如果通知为零,则表示应用程序不是通过推送打开的。当你安装新的应用程序时,点击应用商店上的打开按钮时,它可能会被打开。

 类似资料:
  • 我想用Xamarin格式的C#创建一个基于文本的Android游戏。 在故事中,我想设置角色任务,这需要一些时间,例如“我去挖这个洞,完成后给你打电话。” 如何将通知设置为在设置的时间之后显示?例如,上述声明可能需要10分钟,然后用户收到继续游戏的通知? 我一周前才开始做C#,所以如果这是noobish,或者已经被问到了,我道歉。我到处都找过,但有几种类型的通知,当我试图理解它时,似乎我在读法语。

  • 我想知道是否有办法知道一个应用程序(可以在后台关闭或打开)是否已经启动,只需单击: 通知(在通知中心)? 还是跳板上的应用程序图标? 谢谢

  • 当应用程序完全关闭时,如何以编程方式发送通知? 示例:用户关闭应用程序,也在Android Taskmanager中,然后等待。应用程序应在X秒后或应用程序检查更新时发送通知。 我试图使用这些代码示例,但是: 应用程序关闭时推送通知-活动太多/无法工作 我如何让我的应用程序在关闭时发送通知很多信息,但我不知道如何处理 当android应用程序关闭时,如何发送本地通知?-很多信息,但我不知道如何处理

  • 我想知道是否有标志和参数可以通过单击通知托盘中的推送通知来告诉我用户是否启动了活动/应用程序。 我在 C2DM 接收器中的代码.java 我试着设定 但当该应用程序启动时,其意图中没有额外的内容。 我的mainactivity的onCreate函数中的代码 我得到的输出是onCreate - bundle没有额外的内容。所以多余的部分没有通过。 那么还有其他方法吗?在iOS中很容易

  • 是否可以知道应用程序是否从消息推送中启动/打开? 我想发射活动可以在这里捕捉到: 然而,当应用程序处于后台时,如何从推送通知中检测到它被打开?

  • 如果应用程序关闭,我将如何使其发送通知?我正在制作一个从web服务器读取数据的应用程序,只有当该应用程序关闭且web服务器上的值更改时,我才需要向用户发送通知。

  • 关于这个主题有很多stackoverflow线程,但是我仍然没有找到一个好的解决方案。 如果应用程序不在后台,我可以在调用中检查,查看是否从通知中打开。 如果应用程序在后台,所有帖子都建议使用并检查应用程序状态。但正如我所做的实验(也正如这个API的名称所暗示的那样),当收到通知时会调用这个方法,而不是点击。 所以问题是,如果应用程序启动后后台运行,并且您知道从收到通知(此时不会触发),您如何知道

  • 问题内容: 我有一个iPhone应用程序,可以接收推送通知。目前,我可以通过转到iPhone设置/通知来禁用我的应用程序的推送通知。 但是我想在我的应用程序内添加一个开关或按钮来启用或禁用推送通知。 之所以能做到,是因为我在Foursqure iPhone应用程序中看到了它。他们在设置呼叫通知设置中有一节,用户可以为该应用启用或禁用其他类型的通知。 我四处寻找可以找到合适的解决方案,但仍然找不到方