卓易推送(DroiPush)SDK是为iOS开发者提供的一种消息推送服务模块,应用开发者可以通过第三方服务器或卓易推送管理后台向集成SDK的应用推送消息,减少开发者集成APNs的工作量,降低开发复杂度,同时还能统计推送的各项数据。
由于 DroiPush SDK 依赖于 DroiCore SDK,所以请在安装 DroiPush SDK 之前仔细阅读快速入门 ,完成 DroiCore SDK 的安装。
为了更好地支持SDK推送,需要配置后台运行权限:推送唤醒(静默推送,Silent Remote Notifications)如下图:
在Xcode 8中还需要开启 Push Notifications
,如下图:
将SDK包解压,然后在XCode中选择”添加文件到 'Your project name’…”,将解压后的libs文件夹中的DroiPush.framework
添加到你的工程目录中。
在使用 DroiPush SDK 之前需要先初始化 DroiPush SDK 请在 Applegate.m 中添加如下代码,完成初始化。
#import <DroiPush.h> //导入DroiPush.h
#ifdef NSFoundationVersionNumber_iOS_9_x_Max
#import <UserNotifications/UserNotifications.h> //iOS 10支持
#endif
#define IOS_VERSION [[[UIDevice currentDevice] systemVersion] floatValue]
//从 DroiBaaS 官网上面申请 的 DroiPushSDK 的 APIKey 注意去区分沙箱和生产环境
#if DEBUG
#define DROI_PUSH_API_KEY @"2d84rmSTy-d35ozZv7idiaxxAnJvK5xxHvDlPO24041xkwzAl4WVDmWh3gQFwjn8";
#else
#define DROI_PUSH_API_KEY @"znbZopO0anapI65hOSnIgQu--9hNCt23IxGHj_BrU5v6TdJDKVPhKDTPcZmL90_n"";
#endif
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
//初始化DroiPush SDK并注册远程推送服务
[DroiPush registerForRemoteNotificationWithAPIKey:DROI_PUSH_API_KEY];
//iOS10 支持必须加下面这段代码。
if (IOS_VERSION >= 10.0) {
#ifdef NSFoundationVersionNumber_iOS_9_x_Max
UNAuthorizationOptions types=UNAuthorizationOptionBadge|UNAuthorizationOptionAlert|UNAuthorizationOptionSound;
UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
center.delegate = self;
center requestAuthorizationWithOptions:types completionHandler:^(BOOL granted, NSError * _Nullable error) {
if (granted) {
//点击允许
//这里可以添加一些自己的逻辑
}
else{
//点击不允许
//这里可以添加一些自己的逻辑
}
}];
#endif
return YES;
}
//APNs注册成功上报deviceToken
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
{
[DroiPush registerDeviceToken:deviceToken];
}
接收远程推送的消息
#pragma mark iOS 10新增UNUserNotificationCenterDelegate 代理方法
/// 处理前台收到通知的代理方法
- (void)userNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(UNNotificationPresentationOptions))completionHandler{
NSDictionary * userInfo = notification.request.content.userInfo;
if([notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) {
//应用处于前台时的远程推送接受
}else{
//应用处于前台时的本地推送接受
}
//前台状态下收到通知显示标题
completionHandler(UNNotificationPresentationOptionAlert);
}
// iOS 10系统在点击状态栏进入app
- (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]]) {
//点击远程通知
}else{
//点击本地通知
}
completionHandler();
}
//iOS 10以下收到远程推送和点击远程推送回调
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(nonnull NSDictionary *)userInfo fetchCompletionHandler:(nonnull void (^)(UIBackgroundFetchResult))completionHandler
{
[DroiPush handleRemoteNotification:userInfo];//DroiPush 处理通知代码,必须添加
completionHandler(UIBackgroundFetchResultNewData);
}
开发者可以通过 SDK 提供的接口为应用设置标签,便于按照标签分组推送。需要注意的是 SDK 提供的设置标签接口每次调用时都会覆盖上一次的标签。
过滤掉无效的 tags, tag值不能重复,且只能以字母(区分大小写)、数字、下划线、汉字组成。如果 tags 数量超过限制数量,则返回靠前的有效的 tags。建议在设置 tags 前使用此接口进行校验。SDK 内部也会基于此接口来做过滤。
NSSet *tags = [[NSSet alloc] initWithObjects:@"tag1",@"tag_2",@"标签3",@"tag!4",@"", nil];
NSSet *validTags = [DroiPush filterValidTags:tags];
NSSet *tags = [[NSSet alloc] initWithObjects:@"DroiPush",@"iOS",nil];
[DroiPush setTags:set completionHandler:^(BOOL result) {
//result 为返回结果
}];
[DroiPush getTag:^(BOOL result, NSString *tag) {
// result 为返回结果 tag 为所有标签拼接成的字符串
}];
[DroiPush resetTags:^(BOOL result) {
//result 为返回结果
}];
注意:设置标签为[NSSet set]空集合,表示为清空当前设置,也可以调用resetTags接口清空标签。应用 tag 数量最多限制为1024个,每个长度最多为256字符。
badge(角标)是iOS用来标记应用程序状态的一个数字,出现在程序图标右上角。DroiPush SDK 封装了 badge 的管理功能,允许应用上传 badge 值至 DroiPush 服务器,由 DroiPush 后台帮助开发者管理每个用户所对应的推送 badge 值,简化了设置推送 badge 的操作。实际应用中,开发者只需将变化后的 badge 值通过 setBadge 接口同步至 DroiPush 服务器,无需自己维护用户与 badge 值之间的对应关系,方便运营维护。
[DroiPush setBadge:badge completionHandler:^(BOOL result) {
//result 为返回结果
}];
DroiPush SDK 提供了接收长消息和文件通知的功能。
由于苹果官方规定 APNs 推送 payload 的大小最大为 4K,当开发者需要推送的 payload 超过 4K 大小时,DroiPush SDK 会自动将消息转换为长消息类型供开发者使用;
DroiPush 支持开发者上传自定义文件或使用外部文件(文件 URL),通过通知推送到应用。
kDroiPushReceiveLongMessageNotification
:收到长消息通知kDroiPushReceiveFileNotification
:收到文件通知kDroiPushReceiveSilentNotification
:收到透传消息通知开发者可以通过通知中心监听通知,根据需求对接收到的消息进行处理。
//添加监听
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(receiveLongMessage:)
name:kDroiPushReceiveLongMessageNotification
object:nil];
- (void)receiveLongMessage:(NSNotification *)notification
{
NSLog(@"receiveLongMessage:%@",notification);
}
建议开发者在发布应用前关闭 DroiPush 的 Log 功能,节省系统资源。
//关闭Log功能,默认为开启
[DroiPush setLogOFF:YES];
iOS 平台上,只有 APNs 这个官方的推送通道,是可以随时送达的。通常开发者都会自己部署应用服务器向 APNs Server 推送。DroiPush只需要开发者做一些简单的SDK移植接入工作,就可在短期内使应用具有接收推送消息的功能,免去了开发者额外投入大量人力、服务器资源,将主要精力投入在核心业务的开发上。
DroiPush提供了多种消息类型推送,包括普通通知、静默通知、长消息通知以及文件推送,满足用户消息推送的多样化需求。
DroiPush提供了标签绑定功能,开发者可以根据业务需求为用户绑定多种标签,细分用户分群,使得运营更加简单、直观。
DroiPush提供了普通通知、透传消息、长消息通知以及文件推送。
最基础的通知类型,当应用不在前台状态时会在通知栏或者锁屏页面显示;
应用收到透传消息系统不会有任何提示,开发者可以使用它后台刷新数据(需要先配置Background Modes);
由于苹果官方规定 APNs 推送 payload 的大小最大为 4K,当开发者需要推送的 payload 超过 4K 大小时,DroiPush SDK 会自动将消息转换为长消息类型供开发者使用;
DroiPush支持开发者上传自定义文件,或者使用外部文件(文件url),通过通知推送到应用。
开发者可以在推送平台上查看推送统计数据,对推送的数据进行分析。以下为推送数据统计的指标:
DroiPush支持单播、列播、组播、广播的方式进行推送目标的选择。
推送平台可以通过deviceId指定单个目标进行推送;
推送平台可以通过deviceId列表指定多个目标进行推送;
SDK提供接口给应用打标签,推送时开发者选定推送目标为对应标签,推送服务器则向该标签的分组用户推送消息;
推送服务器向该应用的所有用户推送消息。
为了保证推送服务的质量,我们在实验环境下对服务器进行压力测试,得到的性能参数如下: