集成环信后,当app推到后台没被杀死的时候,接收消息会走本地推送,很多开发者误以为这时候走APNs,其实这时候app长连接未断开,调用苹果的本地通知即可。
首先注册本地通知的权限是必须的:
UIApplication *application = [UIApplication sharedApplication];
application.applicationIconBadgeNumber = 0;
if([application respondsToSelector:@selector(registerUserNotificationSettings:)])
{
UIUserNotificationType notificationTypes = UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert;
UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:notificationTypes categories:nil];
[application registerUserNotificationSettings:settings];
}
然后在自己工程的根控制器或AppDelegate中:
遵守协议
EMChatManagerDelegate
注册代理
[[EMClient sharedClient].chatManager addDelegate:self delegateQueue:nil];
实现接收消息的回调方法
- (void)didReceiveMessages:(NSArray *)aMessages{}
在回调方法中调用环信demo中的- (void)showNotificationWithMessage:(EMMessage *)message方法,showNotificationWithMessage方法对本地推送进行了构建,代码直接复制到自己工程调用,有报错的代码自己处理下即可。
下面贴出实现的代码块:
- (void)didReceiveMessages:(NSArray *)aMessages
{
for(EMMessage *message in aMessages){
UIApplicationState state = [[UIApplication sharedApplication] applicationState];
switch (state) {
case UIApplicationStateBackground:
[self showNotificationWithMessage:message];
break;
default:
break;
}
}
}
------------------------------10.9更---------------------------------
// APP进入后台
- (void)applicationDidEnterBackground:(UIApplication *)application
{
[[EMClient sharedClient] applicationDidEnterBackground:application];
}
// APP将要从后台返回
- (void)applicationWillEnterForeground:(UIApplication *)application
{
[[EMClient sharedClient] applicationWillEnterForeground:application];
}