苹果官方的APNS,支持App不同状态下(前台、后台、未启动等)的消息推送。
另外个方案是,App和应用服务间维护一个长链接,应用服务通过心跳感知App状态。当App为在线状态时,应用服务可以通过该长链接推送消息。一般跟APNS配合使用。
自己的项目中使用的是友盟推送。
在Push消息中设置自定义参数,App在
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
收到消息后解析参数并做相应逻辑(如跳转到相应页面等)
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
NSLog(@"didRegisterForRemoteNotificationsWithDeviceToken");
// 注册用户登录登出监听
[self handleRemoteNotificationDidRegistered];
}
- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error {
NSLog(@"didFailToRegisterForRemoteNotificationsWithError");
}
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {
NSLog(@"didReceiveRemoteNotification");
[UMessage didReceiveRemoteNotification:userInfo];
NSString *jsonString = [userInfo objectForKey:@"custom"];
NSData *jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:jsonData
options:NSJSONReadingMutableContainers
error:nil];
if (dic==nil || [dic isEqual:[NSNull null]]) {
return;
}
[self handleRemoteNotification:dic];
}