如何处理和发送远程通知 Objective-C

Posted

技术标签:

【中文标题】如何处理和发送远程通知 Objective-C【英文标题】:How to handle and send remote notifications Objective-C 【发布时间】:2015-02-04 18:24:46 【问题描述】:

我有一些问题一直在思考。我希望在这里得到他们的答复。

1) 根据设备上发生的情况,我向设备发送了许多推送通知。每个推送通知都用于不同的 ViewController。这样,我的意思是正在接收推送通知,其中包含 ViewController 需要使用的一些自定义数据。 那么最好的设置方法是什么,以便轻松共享通知中的数据?

2) 正如我之前所说,我有不同类型的通知。我现在这样做的方式是,我知道要为每个通知做什么,我这样发送它们:

data: 
       type: "4",
       some other data....
    

所以每次收到通知时,我都有 if 语句来检查它是什么 type。这是一种合法/正确的方法还是有其他方法?

希望您能提供一些代码示例,特别是针对问题 1。

谢谢!!

【问题讨论】:

【参考方案1】:

-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo 是您放置条件的地方。 userInfo 字典是存储通知信息的地方。 例如,要获得您这样做的类型:

if([userInfo[@"aps"][@"type"] isEqualToString:@"4"])

    //your custom code here

现在,当您收到远程通知时,您会希望像这样发送本地通知:

[[NSNotificationCenter defaultCenter] postNotificationName:@"yourMessage" object:nil];

然后在您的视图控制器中添加:

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

不要忘记在您的 viewWillDisappear: 方法中取消注册本地通知,如下所示:

[[NSNotificationCenter defaultCenter] removeObserver:self name:@"yourMessage" object:nil];

希望对你有帮助,如果不清楚,请告诉我。

【讨论】:

很清楚只是一些问题。我应该把 addObserver 放在 ViewDidAppear 中,否则会出现对吗?还有第二个问题。假设我在 Viewcontroller A 中,并且我收到一个通知,说明该通知的类型将在 ViewController B 中使用。如果我说为 Viewcontroller B 设置一些属性值,它还会得到处理吗? 您必须将其放入 ViewWillAppear。由于您正在实施 removeObserver: 只有当前的 ViewController 会收到本地通知。因此,如果您在 ViewController A 中并且您收到一个针对 ViewController B 的通知,则不会发生任何事情。如果你不希望这种行为不要实现 removeObserver: 方法,但 ViewController B 应该已经初始化,以便它能够处理通知。 有没有办法从 viewController A 一开始就对其进行初始化? 可以使用instanceViewControllerWithIdentifier:方法 谢谢,我会努力实现的!

以上是关于如何处理和发送远程通知 Objective-C的主要内容,如果未能解决你的问题,请参考以下文章

如何处理 Android 中远程视图的异常(自定义小部件或自定义通知)?

如何处理视图控制器上的远程通知(而不是 AppDelegate)[关闭]

如何处理 iOS 远程消息中的附加数据 GCM

Alamofire:如何处理和分类错误?

Objective-C:从 JSON 文件读取远程通知太慢

如何在 iOS Objective-c 中实现交互式远程通知