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

Xamarin.ios 如何在Xamarin IOS中检测用户点击应用程序图标或远程通知图标,xamarin.ios,Xamarin.ios,我正在xamarion IOS中构建一个消息应用程序。我的问题如下 应用程序位于后台,并发出远程通知。现在,用户可以通过单击应用程序图标和通知图标来打开应用程序。当收到通知且用户点击通知时,应用程序调用didReceivedRemoteNotification。在这两种情况下,应用程序状态都是后台。 当用户点击通知时,我需要打开与通知相关的屏幕并 当用户点击主屏幕上的应用程序图标时,我需要打开默认屏幕 无论是通过录制远程通知还是通过应用程序图标,我都无法确定应用程序是否已打开 编辑:应用程序仍在

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

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

无论是通过录制远程通知还是通过应用程序图标,我都无法确定应用程序是否已打开

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

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

我已经尝试了下面stackoverflow链接中给出的解决方案


但仍然面临同样的问题。

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

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

因此,我认为并且我已经测试过:当用户锁定屏幕并发出通知时(在此操作之前,应用程序位于前台),
didReceiveMemotentification
不会自动调用

如果您在iOS 10+上部署应用程序,另一种实现效果的方法是实现
IUNUserNotificationCenterDelegate
界面。在您的学员中实施以下两个事件:

[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();
}
[导出(“userNotificationCenter:willPresentNotification:withCompletionHandler:”)]
public void WillPresentNotification(未使用通知中心、未通知通知通知、操作完成处理程序)
{
Console.WriteLine(“处理iOS 10前台通知”);
completionHandler(UNNotificationPresentationOptions.Sound | UNNotificationPresentationOptions.Alert);
}
[导出(“userNotificationCenter:didReceiveNotificationResponse:withCompletionHandler:”)]
public void direceiveNotificationResponse(未使用通知中心、未通知响应、操作完成处理程序)
{
completionHandler();
}
WillPresentNotification
被调用以向在前台运行的应用程序发送通知。而
DidReceiveNotificationResponse
只有在用户点击通知时才会触发,即使应用程序位于前台。因此,您可以将代码从
didReceiveMemotentification
移动到
DidReceiveNotificationResponse
。此事件将确保代码仅在用户点击通知后运行