打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
个推 -- iOS SDK 1.2.0 集成步骤
概述
个推推送是一个端到端的推送服务,使得服务器端消息能够及时地推送到终端用户手机上,让开发者积极地保持与用户的连接,从而提高用户活跃度、提高应用的留存率。
我们提供了一个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运行状态通知
状态类型 :
SdkStatusStarting // 正在启动
SdkStatusStarted // 启动
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的交互过程,如下图
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
IOS SDK
iOS推送之远程推送
详解iOS本地推送与远程推送
iOS中 最新微信支付/最全的微信支付教程详解 韩俊强的博客
支付宝iOS SDK 的简单使用
iOS Wi-Fi连接
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服