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

如何在Xamarin IOS中检测用户点击应用程序图标或远程通知图标

司空叶五
2023-03-14

我正在xamarion IOS中构建一个消息应用程序。我的问题是

应用程序在后台,远程通知出现。现在用户可以通过单击应用程序图标和通知图标来打开应用程序。应用程序调用在收到通知和用户点击通知时进行了接收远程通知。在这两种情况下,应用程序状态都是后台。当用户点击通知时,我需要打开与通知相关的屏幕,当用户在主屏幕上点击应用程序图标时,我需要打开默认屏幕。

我无法识别该应用程序是通过录制远程通知还是通过应用程序图标打开的。

编辑:应用程序仍在后台运行。

2) 应用程序位于前台,用户锁定手机。在这种情况下,应用程序的状态变为后台,因为调用了WillEnterBackground。现在,应用程序处于后台,收到远程通知,并且使用应用程序状态触发的DidReceiveEmotonification事件处于后台。用户点击通知,再次调用DidReceiveEmotentification,状态为后台。因此,我无法打开与通知相关的屏幕,因为我无法确定事件是由于收到通知或由于录制收到的通知而触发的。

我尝试了以下stackoverflow链接iOS推送通知中给出的解决方案:当应用程序位于后台时,如何检测用户是否点击了通知?

但仍然面临同样的问题。

共有1个答案

双元魁
2023-03-14

当用户锁定屏幕时,应用程序将进入后台状态。因此,当远程通知到达时,系统会在通知中心(屏幕顶部)提醒用户,当应用程序处于前台状态时,不会自动触发ddReceiveRemote teNotify。当应用程序处于后台状态时,只有一种状态可以触发ddReceiveRemote teNotify事件(点击顶部的通知打开应用程序)。此背景状态包括您上面提到的情况:

应用程序位于前台,用户锁定手机。

所以我想,我已经测试过了:当用户锁定屏幕并发出通知时(在此操作之前,应用程序位于前台),didReceiveEmotentification不会自动调用。

如果您在iOS10上部署了应用程序,实现效果的另一种方法是实现IUNUserNotificationCenter Server ate接口。在委托中实现以下两个事件:

[Export("userNotificationCenter:willPresentNotification:withCompletionHandler:")]
public void WillPresentNotification(UNUserNotificationCenter center, UNNotification notification, Action<UNNotificationPresentationOptions> completionHandler)
{
    Console.WriteLine("Handling iOS 10 foreground notification");
    completionHandler(UNNotificationPresentationOptions.Sound | UNNotificationPresentationOptions.Alert);
}

[Export("userNotificationCenter:didReceiveNotificationResponse:withCompletionHandler:")]
public void DidReceiveNotificationResponse(UNUserNotificationCenter center, UNNotificationResponse response, Action completionHandler)
{
    completionHandler();
}

调用WillPresentNotification将通知传递给在前台运行的应用程序。只有当用户点击通知时,DidReceiveNotificationResponse才会被触发,即使应用程序位于前台。因此,您可以将代码从didReceiveMemotentification移动到DidReceiveNotificationResponse。此事件将确保代码仅在用户点击通知后运行。

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

  • 根据《本地和远程通知编程指南》,当发送远程通知并点击SpringBoard中的应用程序图标时: 用户点击警报中的默认按钮或点击(或单击)应用程序图标。如果点击默认操作按钮(在运行iOS的设备上),系统将启动应用程序,应用程序将调用其代理的应用程序:didFinishLaunchingWithOptions:method,传入通知负载(用于远程通知)或本地通知对象(用于本地通知)。 如果通知是远程的

  • 我目前正在开发的一个新应用程序遇到了一个奇怪的问题,如果我将应用程序发送到后台(Home按钮),然后使用应用程序图标重新启动应用程序,除了根活动之外的所有活动都会被销毁(在日志中,我会获得所有活动的OnDestroy,除了调用OnResume的根活动)。 如果我将其发送到后台并从当前任务中恢复,它将恢复应用程序。 我已经将< code > Android:launch mode = " singl

  • 您好,我正在使用Firebase在Android中实现推送通知。现在,有一个小图标显示在一个圆圈内。我需要更大尺寸的。请看图片。这是我的密码, 如何从这个小图标设置大图标?

  • 和分别用于: > 当应用程序在后台时用户点击通知时处理 当手机在前台时收到通知时进行处理。 但是,当应用程序在前台时,我们如何处理用户点击通知的事件?(例如,在点击通知时将用户带到相关的视图控制器)

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