热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

单击后为什么远程通知操作无效?-Whyremotenotificationactionisdoingnothingafterclicking?

IhaveconfiguredanactionforaremotenotificationwhenitarrivestomyiOsapp.Iwanttwodiff

I have configured an action for a remote notification when it arrives to my iOs app. I want two different actions whether one key passed in the payload. The code seems to be executed, but the app doesn't open, nor the safari url. Here is my AppDelegate.m:

我已经为远程通知配置了一个动作,当它到达我的iOs应用程序时。我想要两个不同的操作,无论一个密钥是否在有效负载中传代码似乎已执行,但应用程序无法打开,也不会打开safari网址。这是我的AppDelegate.m:

NSString *const NotificatiOnCategoryOpenView= @"openView";
NSString *const NotificatiOnActionOpenView= @"View";

- (void)registerForNotification {
    UIApplication *application = [UIApplication sharedApplication];

    // iOs 8 or greater:

    if ([application respondsToSelector:@selector(registerUserNotificationSettings:)]) {

        UIMutableUserNotificationAction *open;
        open = [[UIMutableUserNotificationAction alloc] init];
        [open setActivationMode:UIUserNotificationActivationModeBackground];
        [open setTitle:NSLocalizedString(@"View", nil)];
        [open setIdentifier:NotificationActionOpenView];
        [open setDestructive:NO];
        [open setAuthenticationRequired:NO];

        UIMutableUserNotificationCategory *actionCategory;
        actiOnCategory= [[UIMutableUserNotificationCategory alloc] init];
        [actionCategory setIdentifier:NotificationCategoryOpenView];
        [actionCategory setActions:@[open] 
                        forContext:UIUserNotificationActionContextDefault];

        NSSet *categories = [NSSet setWithObject:actionCategory];
        UIUserNotificationType types = (UIUserNotificationTypeAlert|
                                        UIUserNotificationTypeSound|
                                        UIUserNotificationTypeBadge);

        UIUserNotificationSettings *settings;
        settings = [UIUserNotificationSettings settingsForTypes:types
                                                     categories:categories];

        [[UIApplication sharedApplication] registerUserNotificationSettings:settings];
    } else if ([application respondsToSelector:@selector(registerForRemoteNotificationTypes:)]) { 
        // iOs 7 or lesser:

        UIRemoteNotificationType myTypes = UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeSound;
        [application registerForRemoteNotificationTypes:myTypes];
    }

}

- (void)application:(UIApplication *)application handleActionWithIdentifier:(NSString *)identifier forRemoteNotification:(NSDictionary *)userInfo completionHandler:(void (^)())completionHandler {

    if ([identifier isEqualToString:NotificationActionOpenView]) {

        NSDictionary *aps = userInfo[@"aps"];

        if ([[aps allKeys] containsObject:@"viewToOpen"]){
            NSString *webString = [[NSString alloc] initWithFormat:@"%@", aps[@"viewToOpen"]];
            NSURL *webURL = [[NSURL alloc] initWithString:webString];

// This line doesn't work:
            [[UIApplication sharedApplication] openURL:webURL];

        } else {
// These two lines doesn't work:
            UINavigationController *navigatiOnController= (UINavigationController *)self.window.rootViewController;
            [navigationController popToRootViewControllerAnimated:NO];
        }
    }

    completionHandler();

}

Thanks!

谢谢!

2 个解决方案

#1


0  

Implement

实行

- (void)application:(UIApplication *)application handleActionWithIdentifier:(NSString *)identifier forRemoteNotification:(NSDictionary *)userInfo completionHandler:(void (^)())completionHandler 

And

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo

Methods. Notification activation mode is set to UIUserNotificationActivationModeBackground,which Activate the app and put it in the background. If the app is already in the foreground, it remains in the foreground.So if you want to application in foreground/launch then use UIUserNotificationActivationModeForeground

方法。通知激活模式设置为UIUserNotificationActivationModeBackground,它激活应用程序并将其置于后台。如果应用程序已经在前台,它仍然在前台。所以如果你想在前台/启动中应用,那么使用UIUserNotificationActivationModeForeground

    [open setActivationMode:UIUserNotificationActivationModeBackground];

Use this activation option:

使用此激活选项:

    [open setActivationMode: UIUserNotificationActivationModeForeground];

Check weather webUrl is proper and working as expected in normal flow.

检查天气webUrl是否正常并在正常流程中按预期工作。

For Xcode 8, u will have to migrate push notification using UserNotification framework.

对于Xcode 8,您必须使用UserNotification框架迁移推送通知。

#2


1  

Your code should be in this method

您的代码应该使用此方法

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo  {

    if(userInfo) {
        UIApplicationState state = [[UIApplication sharedApplication] applicationState];
        NSUInteger notificatiOnType= [[userInfo valueForKey:API_NOTIFICATION_TYPE] integerValue];
        if (state == UIApplicationStateActive) {

            // Write code which should work when notification comes and app is active
            }
            else {
                // Write code which should work when notification comes and app is in background or inactive or terminated
            }
        }
    }
}

This method will get called only

此方法仅被调用

  1. when app is ACTIVE and notification comes
  2. 当应用程序处于活动状态且通知到来
  3. when app is in background or inactive or terminated and notifications comes and user taps on it
  4. 当应用程序处于后台或处于非活动状态或已终止时,通知会进入并且用户可以点击它

推荐阅读
  • 在高并发需求的C++项目中,我们最初选择了JsonCpp进行JSON解析和序列化。然而,在处理大数据量时,JsonCpp频繁抛出异常,尤其是在多线程环境下问题更为突出。通过分析发现,旧版本的JsonCpp存在多线程安全性和性能瓶颈。经过评估,我们最终选择了RapidJSON作为替代方案,并实现了显著的性能提升。 ... [详细]
  • 深入解析Spring启动过程
    本文详细介绍了Spring框架的启动流程,帮助开发者理解其内部机制。通过具体示例和代码片段,解释了Bean定义、工厂类、读取器以及条件评估等关键概念,使读者能够更全面地掌握Spring的初始化过程。 ... [详细]
  • JavaScript中的数组是数据集合的核心结构之一,内置了多种实用的方法。掌握这些方法不仅能提高开发效率,还能显著提升代码的质量和可读性。本文将详细介绍数组的创建方式及常见操作方法。 ... [详细]
  • 本题要求在一组数中反复取出两个数相加,并将结果放回数组中,最终求出最小的总加法代价。这是一个经典的哈夫曼编码问题,利用贪心算法可以有效地解决。 ... [详细]
  • 主调|大侠_重温C++ ... [详细]
  • springMVC JRS303验证 ... [详细]
  • 烤鸭|本文_Spring之Bean的生命周期详解
    烤鸭|本文_Spring之Bean的生命周期详解 ... [详细]
  • 在 Android 开发中,通过 Intent 启动 Activity 或 Service 时,可以使用 putExtra 方法传递数据。接收方可以通过 getIntent().getExtras() 获取这些数据。本文将介绍如何使用 RoboGuice 框架简化这一过程,特别是 @InjectExtra 注解的使用。 ... [详细]
  • 由二叉树到贪心算法
    二叉树很重要树是数据结构中的重中之重,尤其以各类二叉树为学习的难点。单就面试而言,在 ... [详细]
  • 深入解析 Android IPC 中的 Messenger 机制
    本文详细介绍了 Android 中基于消息传递的进程间通信(IPC)机制——Messenger。通过实例和源码分析,帮助开发者更好地理解和使用这一高效的通信工具。 ... [详细]
  • 优化SQL Server批量数据插入存储过程的实现
    本文介绍了一种改进的SQL Server存储过程,用于生成批量插入语句。该方法不仅提高了性能,还支持单行和多行模式,适用于SQL Server 2005及以上版本。 ... [详细]
  • SpringMVC RestTemplate的几种请求调用(转)
    SpringMVCRestTemplate的几种请求调用(转),Go语言社区,Golang程序员人脉社 ... [详细]
  • 本文探讨了如何利用HTML5和JavaScript在浏览器中进行本地文件的读取和写入操作,并介绍了获取本地文件路径的方法。HTML5提供了一系列API,使得这些操作变得更加简便和安全。 ... [详细]
  • 本文探讨了如何通过一系列技术手段提升Spring Boot项目的并发处理能力,解决生产环境中因慢请求导致的系统性能下降问题。 ... [详细]
  • 深入解析MySQL中的七种JOIN查询
    本文详细介绍了MySQL中常用的七种JOIN查询方法,包括内连接、左外连接、右外连接、全外连接以及排除连接等,并通过实例进行说明。 ... [详细]
author-avatar
榴莲味蛋筒
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有