之前写推送功能都在使用百度云推送的系统,然后,突然发现百度云推送在教育网情况下的服务不是很稳定,因此决定采用个推开放平台
个推的官网http://dev.igetui.com/,在这上面注册账号很简单,注册之后,登记新应用,然后有两种方式,一种可以下载SDK自己接入,
还有一种可以选择下载官方网站的示例Demo进行自己的修改,个推的SDK配置其实还是很简单的,官网的文档讲的也很详细下载的SDK包里面有比较详细的接口和文档
但是,在这里我说一下我在使用之中遇到的几个问题,
首先 注册推送服务的代码是
1 MessageManager.getInstance().initialize(this.getApplicationContext());
在这里,成功注册服务之后,会收到一个clientid 这个clientid对应的是设备,在同一个设备上同一个应用不论启动多少次都会拿到同一个值
必须要等到拿到clientid之后才会开始推送服务,平均注册成功的时间依据你的当前的网络状况来确定,一般情况下应该在10-15秒
另外,在这里,使用服务器推送消息智能推送透传消息,在官网的首页看到的通知消息是不能使用服务器推送的,透传消息需要注册一个BroadcastReceiver
在文档中和官方的Demo中都有说明就不详细介绍了这个东西
在这个里面,这个是取得透传数据的代码部分,同时因为要通知主线程更新UI线程,所以我使用了BroadcastReceiver来确保能使消息更新主线程
case Consts.GET_MSG_DATA: // 获取透传数据 // String appid = bundle.getString("appid"); byte[] payload = bundle.getByteArray("payload"); if (payload != null) { String data = new String(payload); System.out.println("the item is " + data); Log.d("GexinSdkDemo", "Got Payload:" + data); Intent intent1 = new Intent(); intent1.setAction("com.message"); context.sendBroadcast(intent1); }
同时clientid也是在这里面拿到的
1 case Consts.GET_CLIENTID: 2 // 获取ClientID(CID) 3 // 第三方应用需要将CID上传到第三方服务器,并且将当前用户帐号和CID进行关联,以便日后通过用户帐号查找CID进行消息推送 4 String cid = bundle.getString("clientid"); 5 6 System.out.println("the client id is" + cid); 7 break;
同时,在个推中还有许多功能其他的功能可以拓展,我正在研究中,以后可能还会有其他的更新