最近初次了解到信鸽推送,详细记录一下整个过程。
一、下载SDK
需要去官网http://xg.qq.com/xg/ctr_index/download下载用户手册,分为服务端和客户端。根据用户手册选择适合当前业务场景的接口,文档中每个接口下有demo可以参考。
pushSingleAccount 推送消息给单个账号(注意分为Android和iOS,所以需要有不同的key和密钥)
public JSONObject pushSingleAccount(int deviceType, String account, Message message) //android使用
public JSONObject pushSingleAccount(int deviceType, String account, MessageIOS message, intenvironment) //IOS 使用
二、注册和生成证书
步骤可参考这篇博文
获取应用的key和密钥,accessId,secretKey是申请信鸽账号后信鸽为用户生成的。服务端使用SECRET KEY。(操作证书的时候我放弃了,直接给前端要的)
ACCESS ID 2100257622
ACCESS KEY ALG1E3KK187E
SECRET KEY 1d36fe96f3b463a5b44f77707d60427f
三、开发环境单元测试
package gov.etax.dzswj.xxzx.impl;
import org.json.JSONObject;
import org.junit.Test;
import com.tencent.xinge.ClickAction;
import com.tencent.xinge.Message;
import com.tencent.xinge.MessageIOS;
import com.tencent.xinge.Style;
import com.tencent.xinge.XingeApp;
/**
* @author hrui
*
*/
public class AppTest{
@Test
public void TestXgIos(){
int EXPIRE_TIME = 3600 * 24 * 3;
String yh = "916204023525847402";
MessageIOS message = new MessageIOS();
message.setAlert("hello hrui!测试iOS啊啊啊");
message.setBadge(1);
message.setExpireTime(EXPIRE_TIME);
XingeApp iosXingeApp = new XingeApp(2200257637L, "78d2a1972ebdb77bcd0f69504d2a326b");
JSONObject iosResult = iosXingeApp.pushSingleAccount(XingeApp.DEVICE_IOS, yh, message, XingeApp.IOSENV_PROD);
int iosRetCode = Integer.valueOf(iosResult.get("ret_code").toString());
System.out.println("iOS按单个账户推送返回结果:"+iosRetCode);
}
@Test
public void TestXgAndroid(){
String yh = "916204023525847402";
Message message = new Message();
Style style = new Style(3, 1, 0, 1, 0);
ClickAction action = new ClickAction();
message.setStyle(style);
message.setAction(action);
message.setType(Message.TYPE_NOTIFICATION);
message.setTitle("title");
message.setExpireTime(3600 * 24 * 3);
message.setContent("hello hrui!Android!!!");
XingeApp androidXingeApp = newXingeApp(2100257621L,"07c66a2fb64893a5db62633a542f8770");
JSONObject androidResult = androidXingeApp.pushSingleAccount(XingeApp.DEVICE_ANDROID, yh, message);
int androidRetCode = Integer.valueOf(androidResult.get("ret_code").toString());
System.out.println("android按单个账户推送返回结果:"+androidRetCode);
}
}
四、结果分析
一、出现问题:iOS信鸽推送,服务端返回0,手机app收不到消息
原因有:
1、可能是iOS推送环境填写错误,根据app是否上线适当选择。
public JSONObject pushSingleAccount(int deviceType, String account, MessageIOS message, int environment)
//iOS设备推送时environment,1:表示推送生产环境;2:表示推送开发环境 environment
2、证书过期
到信鸽后台不需要证书,所以调用服务可以成功,但从信鸽后台下发手机时是需要证书的,如果证书过期了,手机app会收不到消息。但Android不存在证书的概念,没有证书过期的说法。
3、XingeApp.jar版本问题
之前项目原有是1.1版本,后来我下了最新的1.1.8版本的,就可以了。
二、出现问题:推送单一账号时推送成功,但是推送所有设备时,服务端成功,但手机app接收不到信息。
原因:同时进行单元测试时,两个方法的推送内容不要相同,修改后再尝试一下。另外推送不要太频繁。
以上坑都遇到了,调整之后,发送成功。暂时能保证服务端调用信鸽原生接口,可以进行推送消息了。之后还有很多需要优化的事情,比如这个推送消息,点击进去就消失了,我以为点击进去能看到详细内容,后来得知这个app没有功能模块,需要后期开发,会更新的。