《插件自助开发——推送类插件》

推送系统

开发者可以及时的向自己的用户推送通知消息,与用户时刻互动,有效提升用户体验。本文介绍了如何接入SDK的推送服务。

类名及初始化

推送系统的类一般命名为"Push+插件名",并且需要遵循InterfaceUser协议。
以个推为例

@interface PushGeTui : UIResponder <InterfacePush, GeTuiSdkDelegate>

- (void)configDeveloperInfo:(NSMutableDictionary *)cpInfo;
在init方法里调用configDeveloperInfo:方法,执行SDK的初始化操作。
cpInfo参数为字典,需要调用PluginHelper类的getParamsInfo方法,从打包工具里获取到。
以个推为例:

- (id)init {
    self = [super init];
    if (self){
      NSMutableDictionary *dev_info = [Wrapper getDeveloperInfo];
      [self configDeveloperInfo:dev_info];
     }
     return self;
 }

- (void)configDeveloperInfo:(NSMutableDictionary *)cpInfo {
   @try {
      _appID = [cpInfo objectForKey:@"GTAppId"];
      _appKey = [cpInfo objectForKey:@"GTAppKey"];
      _appSecret = [cpInfo objectForKey:@"GTAppSecret"];

     if (!_appID || !_appKey|| !_appSecret) {
        OUTPUT_LOG(@"initSDK : getDeveloperInfo error!\n");
        return;
     }
  }
  @catch (NSException *exception) {
      NSLog(@"%@",exception);
   }
 }

InterfacePush

推送类插件需要实现接口InterfacePush,接口中没有的方法,开发者可以自定义拓展。在InterfacePush接口中,有如下函数:

public void startPush();    //开启服务
public void closePush();    //关闭服务
public void setAlias(String paramString);   //设置别名
public void delAlias(String paramString);   //删除此前设置的别名
public void setTags(ArrayList<String> paramArrayList);  //设置标签
public void delTags(ArrayList<String> paramArrayList);  //删除此前为应用设置的标签
public void setDebugMode(boolean paramBoolean);     // 设置调试模式(已废弃)
public String getSDKVersion();      //获取SDK 版本号
public String getPluginVersion();   //获取插件版本号

开启服务

- (void)startPush;
开启推送服务,在startPush方法中调用SDK的启动推送服务方法。
以个推为例:

- (void)startPush {
    OUTPUT_LOG(@"startPush invoked");
    NSError *err = nil;
    [GeTuiSdk startSdkWithAppId:_appID appKey:_appKey appSecret:_appSecret delegate:self error:&err];
    if (err) {
       NSLog(@"errorInfo:%@", [err localizedDescription]);
       return;
     }
    [self registerRemoteNotification];
}
- (void)registerRemoteNotification {
#ifdef __IPHONE_8_0
    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0) {
       UIUserNotificationSettings *uns = [UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeAlert|UIUserNotificationTypeBadge|UIUserNotificationTypeSound) categories:nil];
       [[UIApplication sharedApplication] registerForRemoteNotifications];
       [[UIApplication sharedApplication] registerUserNotificationSettings:uns];
   } else {
       UIRemoteNotificationType apn_type = (UIRemoteNotificationType)(UIRemoteNotificationTypeAlert|UIRemoteNotificationTypeSound|UIRemoteNotificationTypeBadge);
       [[UIApplication sharedApplication]   registerForRemoteNotificationTypes:apn_type];
   }
#else
   UIRemoteNotificationType apn_type = (UIRemoteNotificationType)(UIRemoteNotificationTypeAlert|UIRemoteNotificationTypeSound|UIRemoteNotificationTypeBadge);
   [[UIApplication sharedApplication] registerForRemoteNotificationTypes:apn_type];

#endif }

关闭服务

- (void)closePush;
关闭推送服务,调用SDK的注销方法,不再接收推送消息。
以个推为例:

- (void)closePush {
  OUTPUT_LOG(@"closePush invoked");
  [GeTuiSdk enterBackground];
}

设置别名

- (void)setAlias:(NSString *)alias;
设置别名,调用SDK的设置别名方法。
alias为需要设置的别名。
以个推为例:

- (void)setAlias:(NSString *)alias {
   OUTPUT_LOG(@"setAlias invoked, alias:%@", alias);
   [GeTuiSdk bindAlias:alias];
}

删除别名

- (void)delAlias:(NSString*)alias;
删除此前设置的别名。
alias参数为需要删除的别名。
以个推为例:

- (void)delAlias:(NSString *)alias {
   OUTPUT_LOG(@"delAlias invoked, alias:%@", alias);
   [GeTuiSdk unbindAlias:alias];
}

设置标签

- (void)setTags:(NSMutableArray *)tags;
为应用设置多个标签。
tags为一个数组,在该方法里调用SDK的设置标签接口。
以个推为例:

- (void)setTags:(NSMutableArray *)tags {
     OUTPUT_LOG(@"setTags invoked, tags:%@", tags);
     if (!tags || [tags count] < 1) {
        OUTPUT_LOG(@"tags is null, please check it!");
        return;
       }
   [GeTuiSdk setTags:tags];
 }

删除标签

- (void)delTags:(NSMutableArray *)tags;
删除此前为应用设置的标签,在该方法中调用SDK删除标签方法。
tags是一个数组,可以存放多个需要删除的标签

设置调试模式

- (void)setDebugMode:(BOOL)debug;
已废弃,实现方式参照模板。

获取SDK版本号

- (NSString *)getSDKVersion;
SDK版本是指第三方SDK的版本号,格式可能都不一样,如6.0、1.0.3、2.1.0.4等,这个版本号格式不需要任何改动。

获取插件版本号

- (NSString *)getPluginVersion;
格式『版本序号_SDK版本号』,版本序号从『2.0.0』开始,每次更新+0.0.1

回调推送消息

插件接受到推送的消息,需要回调给框架。
回调推送消息通过调用PushWrapper类的onActionResult:retCode:retMsg:方法,把推送消息传递出去。
以个推为例

 - (void)GeTuiSdkDidReceivePayload:(NSString *)payloadId    andTaskId:(NSString *)taskId andMessageId:(NSString *)aMsgId fromApplication:(NSString *)appId {

    OUTPUT_LOG(@"GexinSdkDidReceivePayload: payloadId:%@,appId:%@",payloadId,appId);
    _payloadId = payloadId;

    NSData *payload = [GeTuiSdk retrivePayloadById:payloadId];
    NSString *payloadMsg = nil;
    if (payload) {
      payloadMsg = [[NSString alloc] initWithBytes:payload.bytes
                                          length:payload.length
                                         encoding:NSUTF8StringEncoding];
     }
   NSString *record = [NSString stringWithFormat:@" %@, %@", [NSDate date], payloadMsg];
   [PushWrapper onActionResult:self retCode:ACTION_RET_RECEIVEMESSAGE retMsg:record];
   OUTPUT_LOG(@"record: %@", record);

}