项目中有个场景,app传一图片给服务器,服务器对图片运算后返回一个结果给app,可是app并不知道服务器要运算多久,可能1秒可能5秒可能20秒,服务器也不支持socket通信。
当时想到了两个方案。
app每隔几秒(比如2秒)就请求一次服务器接口,30秒内如果拿到想要的结果就停止请求,超过30秒也停止请求。但是觉得比较麻烦和不靠谱。
本身app就集成了极光推送,于是就有了通过发送自定义消息的方案。
即app上传完图片后就弹hud等待,服务器处理完后那边调用一下极光的接口,然后就给app发送自定义消息。
以下是传图片的类的部分代码
主要是注册通知
- (void)viewDidLoad {
[super viewDidLoad];
[self setUpUI];
// 注册通知
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(networkDidReceiveMessage:)
name:kJPFNetworkDidReceiveMessageNotification
object:nil];
}
接受到自定义消息后
// 接收到通知事件
- (void)networkDidReceiveMessage:(NSNotification *)notification {
NSDictionary *userInfo = [notification userInfo];
NSLog(@"%@",userInfo);
//自定义消息就存在这个userInfo中
//这里就写收到自定义消息后的处理代码
}
记得移除通知
- (void)viewWillDisappear:(BOOL)animated{
[super viewWillDisappear:animated];
//移除通知
[[NSNotificationCenter defaultCenter] removeObserver:self name:kJPFNetworkDidReceiveMessageNotification object:nil];
}
这是测试结果
在极光推送的网页上可以推送测试消息
我这里是靠registrationID来指定推送设备的,registrationID在集成极光推送后会有极光SDK自动生成
可选字段就可以用来传消息内容了
在app调试时收到的消息结构就是这样