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

推送系统

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

构造函数和初始化

推送系统的类一般命名为"Push+插件名",构造函数参数为Context,是主 Activity 的Context。在构造函数中实现初始化SDK等。

public class PushXinge implements InterfacePush{
   private static final String LOG_TAG = "PushXinge";
   private static final String SDK_VERSION = "2.38";
   private static final String PLUGIN_VERSION = "2.0.2" + SDK_VERSION;
   private static final String PLUGIN_ID = "97";

   private Context mContext = null;
   private static PushXinge mAdapter = null;
   private boolean mDebug = false;

   public PushXinge(Context context) {
        mContext = context;
        mAdapter = this;
        configDeveloperInfo(PluginHelper.getParamsInfo());
   }

   private void configDeveloperInfo(Hashtable<String, String> cpInfo) {
       LogD("configDeveloperInfo(" + cpInfo.toString() +")invoked!");
       final Hashtable<String, String> curCPInfo = cpInfo;
       mDebug = PluginHelper.getDebugModeStatus();
       PluginWrapper.runOnMainThread(new Runnable() {
          @Override
          public void run() {
        XGPushConfig.enableDebug(mContext, mDebug);
        }
     });
  }

以腾讯信鸽为例,推送类PushXinge实现了InterfacePush接口。
anysdk框架可以通过PushXinge(Context context)方法实例化推送类。
开发者需要在configDeveloperInfo(Hashtable cpInfo)方法中实现推送的初始化操作。

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();   //获取插件版本号

开启服务

public void startPush();
功能说明:开启推送服务
举例说明:在startPush方法中调用信鸽的registerPush方法注册推送服务

//开启推送
@Override
public void startPush() {
   LogD("startPush() invoked!");
   XGPushManager.registerPush(mContext, new XGIOperateCallback() {

        @Override
        public void onSuccess(Object data, int flag) {
           LogD("PushXinge register success !  token is " + data);
        }

        @Override
        public void onFail(Object data, int errCode, String msg) {
            LogD("PushXinge register fail !  code:" + errCode + ",msg:" + msg);
        }
    });
}

关闭服务

public void closePush();
功能说明: 关闭推送服务
举例说明: 在closePush方法中调用信鸽的unregisterPush方法反注册(不再接收消息)推送服务。

//关闭推送
@Override
public void closePush() {
   LogD("closePush() invoked!");
   XGPushManager.unregisterPush(mContext);
}

设置别名

public void setAlias(String paramString);
功能说明:为应用设置别名
举例说明:以Cocos Push推送为例,在setAlias中调用CCPush.setAccount方法。

//设置别名
@Override
public void setAlias(String alias) {
    LogD("setAlias(String tags) invoked!");
    CCPush.setAccount(mContext, alias);
}

删除别名

public void delAlias(String paramString);
功能说明:删除此前设置的别名
举例说明:以Cocos Push推送为例,在delAlias中调用CCPush.delAccount方法。

//删除别名
 @Override
 public void delAlias(String alias) {
   LogD("delAlias(String tags) invoked!");
   CCPush.delAccount(mContext);
 }

设置标签

public void setTags(ArrayList paramArrayList);
功能说明:为应用设置标签
举例说明:在setTags方法中调用信鸽的setTag方法设置标签

//设置标签
@Override
public void setTags(ArrayList<String> tags) {
   LogD("setTags(" + tags.toString() + ") invoked!");
   for (String tag : tags) {
        XGPushManager.setTag(mContext, tag);
    }
}

删除标签

public void delTags(ArrayList paramArrayList);
功能说明:删除此前为应用设置的标签
举例说明:在delTags方法中调用信鸽的deleteTag方法删除标签

//删除标签
@Override
public void delTags(ArrayList<String> tags) {
    LogD("delTags(" + tags.toString() + ") invoked!");
    for (String tag : tags) {
        XGPushManager.deleteTag(mContext, tag);
    } 
}

设置调试模式

public void setDebugMode(boolean paramBoolean);
已废弃,实现方式参照模板。

获取SDK版本号

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

获取插件版本号

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

拓展接口

如果需要使用SDK中的方法,但InterfacePush接口类没有提供,开发者可以自己实现。
举例说明:腾讯信鸽要求将onActivityStarted和onActivityStoped嵌入到所有可能被打开的activity,建议所有activity都加上。此时,开发者就可以自己定义函数实现该功能

public void startSession() {
    LogD("startSession() invoked!");
    XGPushManager.onActivityStarted((Activity)mContext);
}


public void stopSession() {
   LogD("stopSession() invoked!");
   XGPushManager.onActivityStoped((Activity)mContext);
}

接收推送消息

功能说明:插件需要将接收到的透传信息转发给CP
举例说明:腾讯信鸽XGPushBaseReceiver类提供透传消息的接收和操作结果的反馈,需要开发者继承本类,并重载相关的方法。插件通过PushWrapper.onActionResult方法通知CP接收到推送信息。

// 消息透传
@Override
public void onTextMessage(Context context, XGPushTextMessage message) {
   PushXinge.LogD("收到消息:" + message.toString());
   JSONObject jsonorder = new JSONObject();
   try {
      jsonorder.put("title", message.getTitle());
      jsonorder.put("content", message.getContent());
      jsonorder.put("customContent", message.getCustomContent());// 获取自定义key-value
    } catch (JSONException e) {
        PushWrapper.onActionResult(PushXinge.getAdapter(), PushWrapper.ACTION_RET_RECEIVEMESSAGE, jsonorder.toString());
        e.printStackTrace();
        return;
    }
    PushWrapper.onActionResult(PushXinge.getAdapter(), PushWrapper.ACTION_RET_RECEIVEMESSAGE, jsonorder.toString());
   // APP自主处理消息的过程...
}