分享

个推 -- iOS SDK 1.2.0 集成步骤

 没原创_去搜索 2015-07-12

概述

个推推送是一个端到端的推送服务,使得服务器端消息能够及时地推送到终端用户手机上,让开发者积极地保持与用户的连接,从而提高用户活跃度、提高应用的留存率。

我们提供了一个SDK开发工具包,包含了iOS SDK的全部所需资源,解压缩后的文件目录结构如图:

其中dist目录包含集成SDK所需的静态库和头文件。

注意
libGeTuiSdk-{version}.a (version为具体的sdk版本号)使用libo工具将支持i386、arm64、armv7和armv7s的代码打包到了一起,所以这个库将同时支持simulator和device。

项目设置

1. 将dist目录拷贝到项目工程目录下

导入dist/include/所有的头文件、libGeTuiSdk-{version}.a文件和几个系统库到XCode项目中。

2. 添加头文件搜索目录

3. 添加依赖库 (必须,如下图)

系统库支持:

ibz.dylib

libsqlite3.dylib

Security.framework

SystemConfiguration.framework

CFNetwork.framework

CoreTelephony.framework

CoreLocation.framework

AVFoundation.framework

4. SDK后台运行权限设置

4.1 Background Fetch 权限:(必选)

为了更好支持SDK 推送,APP定期抓取离线数据, 添加Background Fetch 功能。

添加background Fetch 权限:


4.2 Audio and AirPlay 权限:(可选)

    Audio and AirPlay 权限开启,可以保证SDK后台长时间运行,保证消息实时到达。开发者后台发送透传消息将直接通过GeTuiSdkDidReceivePayload接口送达。

    (注:该功能视APP应用具体功能而定,如果App不支持后台多媒体播放,请不要勾选,勾选将有概率通不过AppStore审核!)


5. SDK地理围栏功能:(可选)

描述:本功能为使用个推2.0智能标签和个推3.0应景推送的必选功能,建议勾选此功能。

5.1 GPS 定位权限设置(可选)

为了适配IOS8及以上系统: Info.plist 中需要添加 NSLocationWhenInUseUsageDescription 或者  NSLocationAlwaysUsageDescription  key。

NSLocationWhenInUseUsageDescription   允许App前台获取GPS信息

NSLocationAlwaysUsageDescription         允许App前/后台获取GPS信息

其中NSLocationAlwaysUsageDescription 或者 NSLocationWhenInUseUsageDescription key对应的描述将会出现在请求窗口中,如果不需要描述可以设置value为空。

接入流程

1. AppDelegate中启动个推SDK

在AppDelegate 中 didFinishLaunchingWithOptions 方法中,通过平台分配的APPID/APPKEY/APPSECRENT 启动个推SDK,并完成注册APNS通知和处理启动时拿到的APNS透传数据。

代码示例
- (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{
 
   // [1]:使用APPID/APPKEY/APPSECRENT创建个推实例
 
   [self startSdkWith:kAppId appKey:kAppKey appSecret:kAppSecret];
 
   // [2]:注册APNS
   
   [self registerRemoteNotification];
 
   // [2-EXT]: 获取启动时收到的APN数据
 
NSDictionary*message=[launchOptionsobjectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
 
    if (message) {
 
        NSString*payloadMsg = [message objectForKey:@"payload"];
 
        NSString*record = [NSString stringWithFormat:@"[APN]%@,%@",[NSDate date],payloadMsg];
 
        [_viewController logMsg:record];
 
    }
 
   return YES;
 
}

2. 启动SDK ,并设置后台开关和电子围栏开关

- (void)startSdkWith:(NSString *)appID appKey:(NSString*)appKey appSecret:(NSString *)appSecret
 
{
 
    NSError *err =nil;  
 
    //[1-1]:通过 AppId、appKey 、appSecret 启动SDK
 
    [GeTuiSdk startSdkWithAppId:appID appKey:appKey appSecret:appSecret delegate:self error:&err];
 
    //[1-2]:设置是否后台运行开关
 
    [GeTuiSdk runBackgroundEnable:YES];
 
    //[1-3]:设置地理围栏功能,开启LBS定位服务和是否允许SDK 弹出用户定位请求,请求NSLocationAlwaysUsageDescription权限,如果UserVerify设置为NO,需第三方负责提示用户定位授权。
 
    [GeTuiSdk lbsLocationEnable:YES andUserVerify:YES];
 
 
    if (err) {      
        [_viewController logMsg:[NSString stringWithFormat:@"%@", [errlocalizedDescription]]];
 
    }
 
}

3. 当应用进入后台时通知个推SDK进入后台

-(void)applicationDidEnterBackground:(UIApplication *)application
{
    // [EXT] APP进入后台时,通知个推SDK进入后台
    [GeTuiSdk enterBackground];
}

 注:原先stopSDK接口。

4. 向服务器注册DeviceToken

为 GeTui Server 上报 DeviceToken,免除开发者管理 DeviceToken 的麻烦。并可通过个推开发者平台推送APN消息。

-(void)application:(UIApplication*)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken
 
{
 
    NSString *token = [[deviceTokendescription] 
        stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"<>"]];
 
    [_deviceToken release];
 
    deviceToken = [[token stringByReplacingOccurrencesOfString:@" " withString:@""] retain];
 
    NSLog(@"deviceToken:%@",_deviceToken);
 
    // [3]:向个推服务器注册deviceToken
 
   [GeTuiSdk registerDeviceToken:_deviceToken];
 
}

如果获取DeviceToken获取失败,也需要通知个推服务器。

-(void)application:(UIApplication*)application didFailToRegisterForRemoteNotificationsWithError:(NSError*)error
 
{
    
// [3-EXT]:如果APNS注册失败,通知个推服务器
    
[GeTuiSdk registerDeviceToken:@""];
 
}

5. Background Fetch 接口回调

IOS7.0以后支持APP后台刷新数据,会回调performFetchWithCompletionHandler接口,此处为保证个推数据刷新需调用 [GeTuiSdk resumeBackgroundClient] 接口恢复个推SDK 运行刷新数据。

-(void)application:(UIApplication *)application performFetchWithCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
{
    [GeTuiSdk resume];  // 恢复个推SDK运行
 
 
    completionHandler(UIBackgroundFetchResultNewData);
 
}

6. 个推SDK支持用户设置标签

个推SDK支持用户设置标签,标示一组标签用户,可以针对标签用户进行推送。

接口:+ (BOOL)setTags:(NSArray *)tags;

NSArray *tagNames = [tagName componentsSeparatedByString:@"tag1,tag2"];
 
 
[GeTuiSdk setTags: tagNames];

7. 个推SDK支持绑定别名功能

个推SDK支持绑定别名功能,对用户设置别名,可以针对具体别名进行推送。

接口: + (void)bindAlias:(NSString *)alias; //绑定别名

接口: + (void)unbindAlias:(NSString *)alias; //解绑别名

NSString *aAlias = @"张三";
 
[GeTuiSdk bindAlias:aAlias];

 

8. 设置SDK Delegate 回调,实现GeTuiSdkDelegate各个接口方法

8.1 SDK启动成功返回CID

接口: - (void) GeTuiSdkDidRegisterClient:(NSString *)clientId;

- (void)GeTuiSdkDidRegisterClient:(NSString *)clientId  // SDK 返回clientid
 
{
 
    // [4-EXT-1]: 个推SDK已注册,返回clientId
 
    [_clientId release];
 
    _clientId = [clientId retain];
 
}

8.2 SDK收到透传消息回调

接口:-(void)GeTuiSdkDidReceivePayload:(NSString*)payloadId andTaskId:(NSString*) taskId andMessageId:(NSString*)aMsgId fromApplication:(NSString *)appId;

-(void)GeTuiSdkDidReceivePayload:(NSString*)payloadIdandTaskId:(NSString*)taskId andMessageId:(NSString *)aMsgId fromApplication:(NSString *)appId
 
{
 
    // [4]: 收到个推消息
 
    [_payloadId release];
 
    _payloadId =[payloadId retain];
 
    NSData *payload = [GeTuiSdk retrivePayloadById:payloadId]; //根据payloadId取回Payload
 
    NSString *payloadMsg = nil;
 
    if (payload) {
 
        payloadMsg = [[NSString alloc] initWithBytes:payload.bytes
                                            
        length:payload.length
 
 
        encoding:NSUTF8StringEncoding];
 
    }
 
    NSString *record = [NSString stringWithFormat:@"%d, %@, %@",++_lastPaylodIndex, [self formateTime:[NSDate date]], payloadMsg];
    
    NSLog(@"task id : %@, messageId:%@", taskId, aMsgId);
 
    [payloadMsg release];
 
 
}

8.3 SDK收到sendMessage消息回调

接口:- (void) GeTuiSdkDidSendMessage:(NSString *)messageId result:(int)result;

- (void)GeTuiSdkDidSendMessage:(NSString *)messageId result:(int)result {
 
    // [4-EXT]:发送上行消息结果反馈
 
    NSString *record = [NSString stringWithFormat:@"Received sendmessage:%@ result:%d", messageId, result];
 
 
   [_viewController logMsg:record];
 
 
}

8.4 SDK遇到错误回调

接口: - (void) GeTuiSdkDidOccurError:(NSError *)error;

- (void)GeTuiSdkDidOccurError:(NSError *)error
 
{
 
    // [EXT]:个推错误报告,集成步骤发生的任何错误都在这里通知,如果集成后,无法正常收到消息,查看这里的通知。
  
    [_viewController logMsg:[NSString
    stringWithFormat:@">>>[GexinSdk error]:%@", [error localizedDescription]]];
 
}

8.5 SDK运行状态通知

状态类型 :

  1. SdkStatusStarting // 正在启动
  2. SdkStatusStarted // 启动
  3. SdkStatusStoped // 停止
  • 接口 - (void) GeTuiSDkDidNotifySdkState:(SdkStatus)aStatus;
- (void)GeTuiSDkDidNotifySdkState:(SdkStatus)aStatus {
 
    // [EXT]:通知SDK运行状态
 
    _sdkStatus = aStatus;
 
   [_viewController updateStatusView:self];
 
}

sd iOS推送流程

iOS应用&Server&getui SDK&getui Server和Apple Push Notification Server的交互过程,如下图

 

 

 

 

 

 

 

 

 

 

 

 



    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多