最近初次了解到信鸽推送,详细记录一下整个过程。

一、下载SDK

需要去官网http://xg.qq.com/xg/ctr_index/download下载用户手册,分为服务端和客户端。根据用户手册选择适合当前业务场景的接口,文档中每个接口下有demo可以参考。

android 信鸽推送 通知 信鸽助手邀请码_android 信鸽推送 通知

android 信鸽推送 通知 信鸽助手邀请码_iOS_02

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);
    
    }
    
}

android 信鸽推送 通知 信鸽助手邀请码_android 信鸽推送 通知_03

 

四、结果分析

一、出现问题: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不存在证书的概念,没有证书过期的说法。

android 信鸽推送 通知 信鸽助手邀请码_android_04

3、XingeApp.jar版本问题

之前项目原有是1.1版本,后来我下了最新的1.1.8版本的,就可以了。

 

二、出现问题:推送单一账号时推送成功,但是推送所有设备时,服务端成功,但手机app接收不到信息。

原因:同时进行单元测试时,两个方法的推送内容不要相同,修改后再尝试一下。另外推送不要太频繁。

android 信鸽推送 通知 信鸽助手邀请码_iOS_05

 

以上坑都遇到了,调整之后,发送成功。暂时能保证服务端调用信鸽原生接口,可以进行推送消息了。之后还有很多需要优化的事情,比如这个推送消息,点击进去就消失了,我以为点击进去能看到详细内容,后来得知这个app没有功能模块,需要后期开发,会更新的。

android 信鸽推送 通知 信鸽助手邀请码_android 信鸽推送 通知_06