如何通过采取有效载荷中包含的操作来处理 APNS 推送消息

Posted

技术标签:

【中文标题】如何通过采取有效载荷中包含的操作来处理 APNS 推送消息【英文标题】:How can I able to act upon the APNS push message by taking an action contained in the payload 【发布时间】:2012-09-23 11:09:56 【问题描述】:

我是 Objective-c、xcode 和 app dev 的新手,所以请记住这一点。

我可以通过 APNS 向我的新兴应用发送推送通知。我可以看到 JSON 消息并且可以 NSSLog 它。

Payload: 
    aps = 
        alert = 
            "action-loc-key" = Reveal;
            body = "Hi Aleem, we have a new special offer just for you!";
        ;
        badge = 70;
        sound = default;
    ;

    myCMD = 
        "update_colour" = red;
    ;

到目前为止一切顺利。但是,我需要能够通过采取行动来对推送消息采取行动。例如,我希望能够提取 update_colour 并使用值 red 将我唯一的控制器上标签的背景颜色更改为红色。

我的问题是我无法从我的 appdelegate.m 中引用我的标签。因此,我无法更新背景颜色,甚至无法调用控制器上的方法来执行此操作。

对此的任何帮助将不胜感激。

【问题讨论】:

友情提醒:Appstore 审核指南,第 5.6 点 re:广告或营销推送通知 ;) 【参考方案1】:

在您的委托中添加:

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

然后当应用程序运行时收到推送通知/用户打开推送通知时,您可以访问通知有效负载并对其进行操作,然后您可以向视图控制器发送通知。

在您的视图中添加观察者:

[[NSNotificationCenter defaultCenter] addObserver:self
                                     selector:@selector(backgroundChanged:)
                                         name:@"ChangeBackground"
                                       object:nil];

添加句柄。

- (void)backgroundChanged:(NSNotification *)notification 
    NSDictionary *dict = [notification userInfo];

    NSLog(@"%@" [[dict valueForKey:@"myCMD"] valueForKey:@"background-colour"]);

    label.backgroundColor = [UIColor xxx];

然后在委托中:

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo 
    if([userInfo valueForKey:@"myCMD"]) 
            NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter];
        [notificationCenter postNotificationName:@"ChangeBackground"
                                    object:nil
                                    userInfo:userInfo];
    

【讨论】:

非常感谢,对不起,我是目标 c 的新手。我应该将 Observer 和 Handler 添加到哪些文件中? 将观察者添加到视图控制器,您希望在 -viewDidLoad 中更改背景,也在视图控制器中添加 -backgroundChanged: 您处理标签的实际更改的位置。然后在代理中监听 APN 并将通知发送到 ViewController。 太好了,让我了解 notificationCenter 是关键。非常感谢!

以上是关于如何通过采取有效载荷中包含的操作来处理 APNS 推送消息的主要内容,如果未能解决你的问题,请参考以下文章

如何正确处理Shell 函数传人参数中包含的特殊字符

Numpy: arr[...,0,:] 有效。但是如何存储 slice 命令中包含的数据(...、0、:)?

根据另一个数组中包含的索引有效地求和 4D 数组

如何引用文本框中包含的文本来创建 XML 文件?

Firebase FCM - 为啥会收到:有效负载错误,无效的“android”(或“apns”)属性

APNS-SHARP 是在一个连接中发送多个有效负载的库吗?