ios - 在 Xamarin iOS 中的远程通知 'Default User Action' 上推送 View Controller

标签 ios xamarin.ios

我已经设置了远程通知并向有效负载添加了一些自定义键,如果用户点击通知并想要阅读有关该主题的更多信息,它们将提供在主页上推送特定详细信息 ViewController 的选项。

例如:linkType: "services"linkPost: "main"当应用程序进入前台时,会告诉我的应用程序推送主服务页面。

我可以成功访问变量中的键和值topicValue , linkType , 和 linkPost但是当用户点击通知时,我无法调试代码所采用的路径,因此我知道何时何地推送正确的 ViewController。我正在使用 Xamarin.Essentials 包,所以我可以 GetSet这些键值对。我可以在整个应用程序的任何地方访问它们。

public class MyNotificationCenterDelegate : UNUserNotificationCenterDelegate
{
    public override void DidReceiveNotificationResponse(UNUserNotificationCenter center, UNNotificationResponse response, Action completionHandler)
    {
        if (response.IsDefaultAction)
        {
            var userInfo = response.Notification.Request.Content.UserInfo;

            string topicValue = userInfo.ObjectForKey(new NSString("topic")).ToString();
            string linkType = userInfo.ObjectForKey(new NSString("linktype")).ToString();
            string linkPost = userInfo.ObjectForKey(new NSString("linkpage")).ToString();
            Preferences.Set("linkType", linkType);
            Preferences.Set("linkPost", linkPost);

我最初尝试使用 launchOptions FinishedLaunching 中的参数AppDelegate 中的方法,但是当我设置断点时,当我点击远程通知时它们似乎没有命中。在 Xamarin.iOS 中完成此任务的任何帮助将不胜感激。

最佳答案

两件事(后台状态或非事件状态)

  • 如果您的应用在后台不可用并且您使用通知,那么您应该使用 DidFinishLaunching对于这种情况,您应该设置来自通知的 key 。您将从launchOptions 中获得该 key 。
    比较 viewWillAppear 中的那个键的 HomeViewController并把 RedirectScreen如果键匹配的代码。

    例如:- linkType: "services"
  • 如果您的应用程序在后台可用并且收到通知,则 DidReceiveNotificationResponse 调用,您可以重定向应用程序中的任何屏幕。
    首先,您应该获取 topMostViewController然后使用此 Controller 重定向到任何屏幕。

  • 例如:- 获取 topMostViewController
        public static UIViewController GetTopViewController()
    {
        var window = UIApplication.SharedApplication.KeyWindow;
        var vc = window.RootViewController;
        while (vc.PresentedViewController != null)
            vc = vc.PresentedViewController;
    
        if (vc is UINavigationController navController)
            vc = navController.ViewControllers.Last();
    
        return vc;
    }
    

    关于ios - 在 Xamarin iOS 中的远程通知 'Default User Action' 上推送 View Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54774802/

    相关文章:

    xamarin.ios - Xamarin统一API

    ios - 具有全屏广告的广告网络的 MonoTouch 绑定(bind)?

    ios - 将标签连接到 UITableViewCell

    ios - 当用户将手指拖动到新 View 时,如何在不同 View 上注册触摸?

    c# - IOS数据仅在iphone 5s ios 9.1模拟器中显示,但数据在其他模拟器中不显示

    使用 Xamarin.iOS 的 Azure Active Directory 身份验证过程

    ios - 如何使用 SDK 版本 5.0 部署 xamarin ios 应用程序以在 visual studio 2013 中使用旧主题(不是 iOS 7 主题)

    ios - 使 Swift 数组符合协议(protocol)

    ios - 使用 NSLayoutConstraints 的百分比驱动动画

    android - 具有相同名称的不同应用程序?