概述

Android

iOS

REST API

服务端SDK

[TOC]

1. iOS SDK 集成指南

1.1 iOS SDK说明

  • iOS 版本支持:

    支持的iOS版本为6.0及以上版本.

1.2 创建应用

在 爱心推 的管理后台创建应用并上传APNs证书。请参考: 入门指南

如果对APNs证书不太了解 请参考: iOS证书生成指南

  • 点击创建应用,填写应用名称,上传图标。

    image
  • 填写应用包名,选择类型、上传pem证书,输入验证码。

    image
  • 预览无误后,点击完成。

1.3 配置工程

  • 导入SDK:

    在爱心推官网下载最新SDK将SDK包解压,在Xcode中选择"Add files to 'Your project name'…",将解压后的lib子文件夹(包含IXPushSdk.h、libIXPushSdk.a)添加到你的工程目录中。

  • 添加Framework:

SystemConfiguration.framework
CoreTelephony.framework
Security.framework
libz.tbd
libsqlite3.tbd

  • 在工程的info.Plist中添加NSAppTransportSecurity key,允许http网络 请求(iOS9以上)
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
  • 请开启Application Target的Capabilities->Push Notifications选项,如图:

image

  • 请开启Application Target的Capabilities->Background Modes->Remote notifications选项,如图:

image

1.4 增加代码

```objc

  • (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.
    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0){
    UIMutableUserNotificationAction *action = [[UIMutableUserNotificationAction alloc] init];
    action.identifier = @"acceptAction";
    action.title=@"Accept";
    action.activationMode = UIUserNotificationActivationModeForeground;

    UIMutableUserNotificationAction *action2 = [[UIMutableUserNotificationAction alloc] init];
    action2.identifier = @"rejectAction";
    action2.title=@"Reject";
    action2.activationMode = UIUserNotificationActivationModeBackground;
    action2.authenticationRequired = YES;
    action2.destructive = YES;
    
    UIMutableUserNotificationCategory *categorys = [[UIMutableUserNotificationCategory alloc] init];
    categorys.identifier = @"Category";
    [categorys setActions:@[action,action2] forContext:(UIUserNotificationActionContextMinimal)];
    
    UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeAlert|UIUserNotificationTypeBadge|UIUserNotificationTypeSound) categories:[NSSet setWithObjects:categorys, nil]];
    
    
    [IXPushSdkApi register:launchOptions settings:settings];

    } else {

    [IXPushSdkApi register:launchOptions types:(UIRemoteNotificationTypeAlert|UIRemoteNotificationTypeSound|UIRemoteNotificationTypeBadge)];

    }

    //点击推送,launchOptions会存放点击的推送内容,然后demo通过通知传递数据
    if (launchOptions != nil) {
    NSDictionary *userInfo = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
    if (userInfo != nil) {
    [[NSNotificationCenter defaultCenter]postNotificationName:@"message" object:nil userInfo:userInfo];
    }
    }
    return YES;
    }

-  在- (void)application:(UIApplication *) application didRegisterForRemoteNotificationsWithDe- viceToken:(NSData *)deviceToken 中注册deviceToken:

objc

  • (void)application:(UIApplication ) application didRegisterForRemoteNotificationsWithDeviceToken:(NSData)deviceToken {
    [IXPushSdkApi registerDeviceToken:deviceToken
    channel:@"test" version:@"1.0" appId:123456789];
    }
- 如果deviceToken获取失败,可在下面的方法中查看原因:

objc

  • (void) application:(UIApplication *)application
    didFailToRegisterForRemoteNotificationsWithError:(NSError
    *)error {
    NSLog(@"register fail,%@",error);
    }
- 在  - (void) application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void ... (UIBackgroundFetchResult))completionHandler 中 对收到的消息进行处理:

objc

  • (void) application:(UIApplication *)application
    didReceiveRemoteNotification:(NSDictionary *)userInfo
    fetchCompletionHandler:(void (^)
    (UIBackgroundFetchResult))completionHandler {
    [IXPushSdkApi handleNotification:userInfo];
    }
### 1.5 接口的使用
类:public class IXPushSdkApi,所有Api均封装为此类的静态成员。

#### 1.5.1 注册通知服务
+(void)register: (NSDictionary *)launchOptions settings:
(UIUserNotificationSettings *) settings;(iOS8.0       +(void)register:(NSDictionary *)launchOptions types:
(UIRemoteNotificationType) types; iOS8.0      该接口在启动时调用,注册苹果通知服务,另外可以对通知点击行为进行统计.

objc
// 调用示例
[IXPushSdkApi register:launchOptions settings:settings];

#### 1.5.2 注册token和应用id
+(void)registerDeviceToken:(NSData *)token channel:
(NSString *)channel version:(NSString *)version appId:(uint32_t)appId;
该接又在获取到通知服务的token时调用

objc
//调用示例
[IXPushSdkApi registerDeviceToken:deviceToken channel:@"test"
version:@"1.0" appId:123456789];

#### 1.5.3 注销通知服务
+(void)unregisterPush;
该接又在需要停止通知服务时调用

objc
// 调用示例
[IXPushSdkApi unregisterPush];

#### 1.5.4 恢复通知服务
该接又在停止通知服务后需要恢复时使用
+(void)registerNotificationSettings:(UIUserNotification- Settings *) settings;  iOS8.0      
+(void)registerNotificationTypes:(UIRemoteNotification- Type) types;  iOS8.0  

objc
// 调用示例
[IXPushSdkApi registerNotificationSettings:settings];

#### 1.5.5 检查通知服务是否已注册
+(BOOL)isRegistered;

objc
// 调用示例
BOOL isRegistered = [IXPushSdkApi isRegistered];

#### 1.5.6 增加标签接口
+(void)addTags:(NSArray *)tags delegate:(id)tagOpDele-
gate;  
@protocol IXTagOpDelegate<NSObject>
-(void)onResult:(BOOL)result tags:(NSArray *)tags;  
@end  
应用可以通过标签来标记特定的用户群体, 如"北京"用户,"男"用户, "商务"用户等。 Push系统根据伴随消息下发的标签来对特定人群进行消息发送。在push系统中,标签是一 个16位的整数,应用将标签值和具体含义相对应。  
可同时添加多个标签,用英文逗号(",")分隔。 请注意,添加标签必须在成功初始化(注册token和应用id)之后进行。 添加成功的结果会
在回调中返回。
方法如下:

objc
// tags: NSArray类型,其中的元素是NSNumber,且其值为int16
// delegate: 用于接收添加结果的回调
[IXPushSdkApi addTags:tags delegate:delegate];

objc
//添加结果通过IXTagOpDelegate的onResult返回:

  • (void)onResult:(BOOL)result tags:(NSArray *)tags{
    if (tags != nil) {
    if (result == TRUE) {
    NSLog(@"add tag succeed,%@",tags);
    } }
    }
注意,由于系统限制一个用户最多设置16个tag,超出部分会被丢弃(超过16个则最先添加 的tag会自动被剔除,只保留最后新添加的16个)。返回结果中只有成功添加的tag。

#### 1.5.7 删除标签接口
+(void)deleteTags:(NSArray *)tags delegate:(id)tagOpDele-
gate;  
和增加标签接又类似,本接又必须在成功注册token和应用id之后才能调用

objc
// tags: NSArray类型,其中的元素是NSNumber,且其值为int16
// delegate: 用于接收删除结果的回调
[IXPushSdkApi deleteTags:tags delegate:delegate];

结果会异步通过delegate返回。删除标签时可同时删除多个tag,以英文逗号相隔,若其 中有不存在的tag,只会成功删除存在的tag。若删除失败,原因可能是数组中的tag都不存 在或网络问题。


#### 1.5.8 列出标签接口
+(NSArray *)listTags;

objc
NSArray *tags = [IXPushSdkApi listTags];

#### 1.5.9 绑定别名接口
+(BOOL)bindAlias:(NSString *)alias delegate:(id)aliasOp- Delegate;  
@protocol IXAliasOpDelegate<NSObject>
-(void)onResult:(BOOL)result alias:(NSString *)alias;  
@end  
alias为String,请注意限制长度为40个字节,这里长度并不是字符数,而是字符转成字节表 示后的字节数,比如一个英文字母的UTF-8只占用一个字节,但是一个中文字符要占用二 到三个字节。
本接又必须在成功注册token和应用id之后才能调用

objc
[IXPushSdkApi bindAlias:"name" delegate:delegate];

objc
//绑定结果会在delegate中回调
-(void)onResult:(BOOL)result alias:(NSString *)alias{
if (result == TRUE) {
NSLog(@"bind alias succeed,%@",alias);
}
}

#### 1.5.10 解绑别名接口
+(BOOL)unbindAlias:(NSString *)alias delegate:(id)alias-
OpDelegate;  
本接又必须在成功注册token和应用id之后才能调用

objc
//解绑结果会在delegate中回调
[IXPushSdkApi unbindAlias:"name" delegate:delegate];

#### 1.5.11 处理推送消息
+(void)handleNotification:(NSDictionary *)userInfo;  
在接收到远程通知时进行调用

objc
[IXPushSdkApi handleNotification:userInfo];

#### 1.5.12 设置Badge接口
+(BOOL)setBadge:(int)value;  
本接又必须在成功注册token和应用id之后才能调用

objc
[IXPushSdkApi setBadge:0];
```

 value取值小于0时返回FALSE, 否则返回TRUE。

注意事项:
      1. 对于增加标签,绑定别名等异步API,依赖于token和appId,请确保初始化to- ken和appId成功返回异步结果后再进行调用;
      2. 测试过程中,请确认手机或者模拟器已成功连入网络。