友盟+搜索

{{errorMsg}}

文档概述

本文档主要介绍iOS10新增的富文本推送,以及各种定制化的本地推送。

iOS10远程推送的基本流程实现示意图:

iOS10远程推送的基本流程实现示意图

服务器端发送一个推送的消息,这里边包含了一个参数:

"mutable-content":1

当客户端接收到这个推送的消息时,会先检测消息体中是否存在一个mutable-content的参数,如果有这个参数,并且参数的值为数字1,那么它就会调用项目中的Notification Service Extension,在这个Target中去下载富文本的内容,但是下载的内容和时间都有限制。具体数据如下: 这里写图片描述 具体苹果官方文档,附件要求

注意:下载的时间不要超过30s,否则将不会显示通知的富文本内容。

下载完成以后会降富文本内容将会在推送的消息中显示。

iOS10富文本推送的集成

  1. 下载官方最新的1.4.0SDK
  2. 打开压缩包,并将文件夹中的UMessage_Sdk_1.4.0拖入到自己的项目中。 项目结构

  3. 引入库文件

    增加UserNotification.framework到项目中。具体操作如下:点击项目---->TARGET---->Build Phases---->Link Binary with Libraries ---->左侧+号---->搜索UserNotification

  4. 引入头文件

    appdelegate.m文件中引入UMessage.h加入

    #import <UserNotifications/UserNotifications.h>
    
    
    并且引入UNUserNotificationCenterDelegate,然后在didFinishLaunchingWithOptions中进行一些配置

  5. //初始化方法,也可以使用(void)startWithAppkey:(NSString *)appKey launchOptions:(NSDictionary * )launchOptions httpsenable:(BOOL)value;这个方法,方便设置https请求。
    [UMessage startWithAppkey:@"your appkey" launchOptions:launchOptions];
    
    
    //注册通知,如果要使用category的自定义策略,可以参考demo中的代码。或者1.4.0的文档
    [UMessage registerForRemoteNotifications];
    
    //iOS10必须加下面这段代码。
    UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
    center.delegate=self;
    UNAuthorizationOptions types10=UNAuthorizationOptionBadge|UNAuthorizationOptionAlert|UNAuthorizationOptionSound;
    [center requestAuthorizationWithOptions:types10 completionHandler:^(BOOL granted, NSError * _Nullable error) {
    if (granted) {
    		//点击允许
    		//这里可以添加一些自己的逻辑
    	} else {
    		//点击不允许
    		//这里可以添加一些自己的逻辑
    	}
    }];
    
    //打开日志,方便调试
    [UMessage setLogEnabled:YES];
    
    
  6. 对远程推送的消息进行接收。
  7. 
    //iOS10新增:处理前台收到通知的代理方法
    -(void)userNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(UNNotificationPresentationOptions))completionHandler{
        NSDictionary * userInfo = notification.request.content.userInfo;
        if([notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) {
            //应用处于前台时的远程推送接受
            //关闭友盟自带的弹出框
            [UMessage setAutoAlert:NO];
            //必须加这句代码
            [UMessage didReceiveRemoteNotification:userInfo];
            
        }else{
            //应用处于前台时的本地推送接受
        }
        //当应用处于前台时提示设置,需要哪个可以设置哪一个
        completionHandler(UNNotificationPresentationOptionSound|UNNotificationPresentationOptionBadge|UNNotificationPresentationOptionAlert);
    }
    
    //iOS10新增:处理后台点击通知的代理方法
    -(void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)())completionHandler{
        NSDictionary * userInfo = response.notification.request.content.userInfo;
        if([response.notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) {
            //应用处于后台时的远程推送接受
            //必须加这句代码
            [UMessage didReceiveRemoteNotification:userInfo];
            
        }else{
            //应用处于后台时的本地推送接受
        }
        
    }
    
    

    UMessage自带了一个应用在前端时的一个弹出框,具体的可以看下demo中这一块的代码。

  8. 配置证书和bundle id

  9. 接下来还是要配置证书,因为iOS10中有一个富文本的推送,这个Target也需要一个app id。但是也是有要求的,配置要求如下所示:

    //这个app id要打开推送
    
    com.umeng.umessage
    
    //这个app id是一个team id,不能设置推送,不过这个是没有影响的
    
    com.umeng.umessage.*
    
    

    具体的证书和app id配置参考iOS证书配置指南

  10. 打开推送开关

  11. 配置完证书,我们就要进行一个设置了,点击项目---->TARGET---->Capabilities,将这里的Push Notification的开关打开,效果如图所示: 这里写图片描述

    注意:一定要打开Push Notification,且两个steps都是正确的,否则会报如下错误:Code=3000 "未找到应用程序的“aps-environment”的授权字符串"

  12. 接下来我们创建一个Notification Service Extension,具体步骤如下: File---->New---->Target----->Notification Service Extension----->命名 创建的Notification Service Extension中有三个文件,如下图所示:

    这里写图片描述

    将demo中的NotificationService.m文件中的代码复制到现在的这个项目中。

    注意:

    self.bestAttemptContent.title = [NSString stringWithFormat:@"%@ [modified]", self.bestAttemptContent.title];这句为测试代码,主要是为了测试项目是否调用了notification service

  13. 发送一个消息,消息体如下所示。如使用友盟后台推送可以跳到最后的后台发送页面

  14. {
        "appkey":"your appkey",
        "production_mode":"false",
        "timestamp":1474340669558,
        "device_tokens":"your devicetoken",
        "type":"unicast",
        "payload":{
            "aps":{
                "mutable-content":1,
                "badge":1,
                "alert":{
                    "body":"hello this is body",
                    "subtitle":"hello title",
                    "title":"hello this is subtitle"
                },
    "image":"https://dev.umeng.com/system/resources/W1siZiIsIjIwMTYvMDkvMjAvMTFfMzhfMzhfMTFfcHVzaC5wbmciXV0/push.png"
            }   
        }
    }
    
    

    注意:富文本的内容链接必须是https的

  15. 效果图

    这里写图片描述 这里写图片描述
  16. 集成Category策略的代码,请查看自定义推送显示按钮

  17. 友盟后台发送富文本消息

  18. 如下图所示:

    这里写图片描述
  19. 友盟后台新版与旧版的区别

  20. alert参数的变化

    新版本适配了iOS10,所以消息体的结构有所变化。在旧版中,alert的参数是一个String型的,而在新版中是一个Dictionary型的。

    消息体内容的变化

    在旧版中,alert的参数是一个body,而在新版中是三个键值对,一个title,一个subtitle,一个body。而且下方也增加了富文本的内容。

    新版发送效果

    新版发送消息以后,在iOS10的设备上所有的内容都会显示,在iOS10以下的设备上只显示内容。

    旧版发送效果

    在所有设备上都只显示内容。