iOS 信鸽SDK完整接入

简介

信鸽iOS SDK是一个能够提供Push服务的开发平台,提供给开发者简便、易用的API接口,方便快速接入。

注意:请按照指南进行SDK配置,以免引起不必要的错误。
运行环境
iOS 5.0 及以上版本。在程序启动时注册通知,参考以下代码:

- (void) registerNofitication {
[[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound)];
}

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    [self registerNofitication]; 
    return YES;
}

功能

获取Access ID和Access Key
前往信鸽官网 http://xg.qq.com ,用QQ号登录,添加应用基本信息并注册,之后可获取Access ID和Access Key。

工程配置

1、 下载信鸽SDK压缩包到本地并解压;

2、 创建或打开Xcode iOS工程;

3、 将XGSetting.h 和 XGPush.h 和 libXG-SDK.a添加到Xcode工程;

4、 添加对以下libraries的引用。包括CFNetwork.framework , SystemConfiguration.framework , CoreTelephony.framework , libz.dylib , libXG-SDK.a,Security.framework, libsqlite3.0.tbd(官网上的流程缺了这个,博主就是漏了这个,一直有错误提示)

java 信鸽平台 信鸽网站下载_参数说明

API接口

类名:XGPush
说明:Push服务,推送效果
注意:在Console(控制台)里会看到“[xgpush]Disconnected.”为正常现象,在调用信鸽接口时候,如果服务器响应超时或者已经成功收到服务器的返回数据,手机会断开和服务器的连接。

注册苹果推送服务

在Demo中可以看到具体实现,对iOS8和之前的版本做了区分。

示例

//注册Push服务,注册后才能收到推送
//iOS8注册push方法

#if __IPHONE_OS_VERSION_MAX_ALLOWED >= _IPHONE80_             
  [self registerPushForIOS8]; //具体实现参考Demo             
#else
//iOS8之前注册push方法
[[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound)];
#endif

注册设备信息

在application: didRegisterForRemoteNotificationsWithDeviceToken中调用。

注意:设备的deviceToken由苹果下发,可能会产生变化。同一设备在开发环境和生产环境是不相同的。
发起注册条件

  • 未注册
  • account变更
  • 距离上次注册成功超过15小时。达到以上条件才能向后台进行网络请求,以及触发回调函数。

函数原型

+(NSString*)registerDevice:(NSData *)deviceToken;
+(NSString *)registerDeviceStr:(NSString *)deviceToken; 
    //字符串版

参数说明
deviceToken:函数didRegisterForRemoteNotificationsWithDeviceToken的参数。

返回值
NSString:获取到的deviceToken字符串

示例

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { 
   //注册设备
NSString * deviceTokenStr = [XGPush registerDevice: deviceToken];

   //打印获取的deviceToken的字符串
NSLog(@"deviceTokenStr is %@",deviceTokenStr);
}

初始化push信息

在application: didFinishLaunchingWithOptions中调用startWithAppkey接口,初始化。

函数原型

+(void)startApp:(uint32_t)appId appKey:(NSString *)appKey;

参数说明
Access Id: 通过xg.qq.com注册app时得到的Access Id。
Access key:通过xg.qq.com注册app时得到的Access key。

返回值

示例

[XGPush startApp:101 appKey:@"akey"];

设置帐号

上报用户的帐号,以便支持按帐号推送。

使用指定的账号(一个账号可能在多个设备登陆)注册APP,这样可以通过后台向指定的账号发送推送消息。
注意:这里的帐号可以是邮箱、QQ号、手机号、用户名等任意类别的业务帐号。
在初始化信鸽后,注册设备之前调用。

函数原型

+(void)setAccount:(NSString *)account;

参数说明
account: 用户的别名(帐号)

返回值

示例

[XGPush setAccount:@"123456"];

设置标签

开发者可以针对不同的用户设置标签。标签如性别、年龄、学历、爱好等,app业务本身均可以通过自己的数据定制。

函数原型

+(void)setTag:(NSString*)tag;

参数说明
tag:字符串

返回值

示例

NSString* tag= @"age:10";
[XGPush setTag: tag];

删除标签
开发者可以删除设置过的标签。

函数原型

+(void)delTag:(NSString *)tag;

参数说明
tag:字符串

返回值

示例

NSDictionary* tag= @"age:10";
[XGPush delTag: tag];

打开效果统计

如果需要统计由信鸽推送的点击或者打开,需要开发者在didReceiveRemoteNotification(如果没有则按照下面的示例手动添加)中调用handleReceiveNotification , 然后在didFinishLaunchingWithOptions中调用handleLaunching。

注意:
如果app在前台运行时,不会收到弹窗。
但是通过userInfo可以取到推送的信息(包括内容,角标,自定义参数等)
如果需要弹窗,则需要自行编码。

函数原型

+(void)handleReceiveNotification:(NSDictionary *)userInfo;
//app在运行时
+(void)handleLaunching:(NSDictionary *)launchOptions;
//app不在运行时,点击推送激活时

参数说明
事件本身默认的参数名

返回值

示例

- (void)application:(UIApplication*)application didReceiveRemoteNotification:(NSDictionary*)userInfo
{
   [XGPush handleReceiveNotification:userInfo];
} 

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    [XGPush handleLaunching: launchOptions];
}

注销设备

注销设备,此台设备不接收推送。

函数原型

+(void)unRegisterDevice;

示例

[XGPush unRegisterDevice];

注销后再注册
如果注销设备后,需要重新注册设备,需要先调用以下函数。

函数原型

+(void)initForReregister:(void (^)(void)) successCallback;

示例

[XGPush startApp:2200022728 appKey:@"IMJ34Y25JN4I"];

void (^successCallback)(void) = ^(void){ 
//中间部分参考Demo中的代码 
}; 
[XGPush initForReregister:successCallback];

本地推送通知

  • 一般本地推送
    在指定时间进行本地推送。常用于定时提醒如领取体力,每日记录或签到等场景。

函数原型

+(void)localNotification:(NSDate *)fireDate alertBody:(NSString *)alertBody badge:(int)badge alertAction:(NSString *)alertAction userInfo:(NSDictionary *)userInfo;

参数说明
fireDate: 推送触发的时间
alertBody: 推送的内容
badge: 改变App的角标,如果为-1,则不改变。
alertAction: 推送的右侧按钮的文字,默认为“启动”。
userInfo: 自定义的一组key/value信息

示例

[XGPush localNotification:fireDate alertBody:@"测试本地推送" badge:2 alertAction:@"确定" userInfo:userInfo];
  • App在前端运行时响应本地推送
    App在前台运行时,苹果的推送默认不弹窗。通过此接口可进行弹窗。

函数原型

+(void)localNotificationAtFrontEnd:(UILocalNotification *)notification userInfoKey:(NSString *)userInfoKey userInfoValue:(NSString *)userInfoValue;

参数说明
userInfoKey: 标识本地推送的Key
userInfoValue: 标识本地推送的Value

示例

[XGPush localNotificationAtFrontEnd:notification userInfoKey:@"clockID" userInfoValue:@"myid"];
  • 删除本地推送【方法一】
    iOS最多允许一个App存储64个本地推送。以下函数可以进行删除。

函数原型

+(void)delLocationNotification:(NSString *)userInfoKey userInfoValue:(NSString *)userInfoValue;

参数说明
userInfoKey: 标识本地推送的Key
userInfoValue: 标识本地推送的Value

返回值

示例

[XGPush delLocationNotification:@"clockID" userInfoValue:@"myid"];
  • 删除本地推送【方法二】
    iOS最多允许一个App存储64个本地推送。以下函数可以进行删除。

函数原型

+(void)delLocationNotification:(UILocalNotification *)myUILocalNotification;

参数说明
myUILocalNotification: 本地推送对象

返回值

示例

[XGPush delLocationNotification:notification];
  • 清空所有本地推送
    iOS最多允许一个App存储64个本地推送。以下函数可以进行清空。

函数原型

[XGPush clearLocalNotifications];

参数说明

返回值

示例

[XGPush clearLocalNotifications];

回调函数说明
从2.1.0(含)版本之后,带有网络请求的接口都增加了回调函数,包括成功时的回调successCallback和失败时的回调errorCallback
2.1.0之前的版本可以通过Console里的rspCode判断结果,为0代表成功。

函数原型

succussCallback:(void (^)(void)) successCallBack 
errorCallback:(void (^)(void)) errorCallback

返回值

示例

void (^succussBlock)(void) = ^(void){
        //成功之后的处理
        NSLog(@"[xgpush]register succussBlock ,deviceToken: %@",deviceTokenStr);
    };

    void (^errorBlock)(void) = ^(void){
        //失败之后的处理
        NSLog(@"[xgpush]register errorBlock");
    };

    //注册设备
    [XGPush registerDevice:deviceToken succussCallback:succussBlock errorCallback:errorBlock];

iOS推送结果

app在前台运行时,不弹出推送框,但是app通过代码可以获取到推送的消息。
app在后台运行或者杀死状态时,会弹出推送框并且可以通过代码获取到推送的消息。
app在前台和后台运行时,推送上报触发的是didReceiveRemoteNotification事件。
app在杀死状态时,推送上报触发的是didFinishLaunchingWithOptions事件。

用户能接收到的如下:

用户进入App,按home键,发送信鸽消息,可以接收到弹窗和通知中心的通知;
用户进入App,按home键,进程杀掉,可以接收到弹窗和通知中心的通知;
用户进入App,保持在App中,后台可以接收到信鸽消息,但是前台没有弹窗和通知中心通知。

iOS注意事项

信鸽只能保证将消息转交APNS,因此若APNS出错会产生一定得推送时间误差。
APNS只为离线终端保存一条消息,所以离线终端上线后仅能收到离线期间最新的一条消息。
受APNS和iOS的限制,效果统计功能可能会有一定得统计误差。