Android,IOS使用个推服务端集成推送消息指南

集成 Java SDK

1.JDK要求

个推Java SDK需要JDK1.6以及之上版本。 可以到后面的网址去下载最新版的JDK:http://www.oracle.com/technetwork/java/javase/downloads/index.html

安装方式可从以下两种方法中选择

方法一:maven方式安装

将下边的依赖放到maven项目的 pom.xml 中:

<dependency>
    <groupId>com.gexin.platform</groupId>
    <artifactId>gexin-rp-sdk-http</artifactId>
    <version>4.1.1.4</version>
</dependency>

然后再增加一个repository到 pom.xml 中:

 <repositories>
    <repository>
        <id>getui-nexus</id>
        <url>http://mvn.gt.getui.com/nexus/content/repositories/releases/</url>
    </repository>
 </repositories>

方法二:jar包方式安装

1.下载工具包
下载服务端SDK开发工具包,下载地址为:http://www.getui.com/download/docs/getui/server/GETUI_JAVA_SDK_4.1.1.4.zip

2.项目中导入依赖

3.Android工具类

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import com.gexin.rp.sdk.base.IAliasResult;
import com.gexin.rp.sdk.base.IBatch;
import com.gexin.rp.sdk.base.IIGtPush;
import com.gexin.rp.sdk.base.IPushResult;
import com.gexin.rp.sdk.base.impl.AppMessage;
import com.gexin.rp.sdk.base.impl.SingleMessage;
import com.gexin.rp.sdk.base.impl.Target;
import com.gexin.rp.sdk.base.uitls.AppConditions;
import com.gexin.rp.sdk.exceptions.RequestException;
import com.gexin.rp.sdk.http.IGtPush;
import com.gexin.rp.sdk.template.LinkTemplate;
import com.gexin.rp.sdk.template.NotificationTemplate;
import com.gexin.rp.sdk.template.TransmissionTemplate;
import com.gexin.rp.sdk.template.style.Style0;

public class GetuiUtils {

   private static String appId = "";
    private static String appKey = "";
    private static String masterSecret = "";
    public static String host = "https://sdk.open.api.igexin.com/apiex.htm";
    //appId,appKey,masterSecret在个推配置后台都有,我在这就不写了,是用自己应用的即可
    public static IGtPush push;

    static {
        push = new IGtPush(host, appKey, masterSecret);
    }

    /**
     * 绑定用户cid 别名
     *
     * @param Alias
     * @param CID
     * @return
     */
    public static boolean bindAlias(String alias, String CID) {
        IAliasResult bindSCid = push.bindAlias(appId, alias, CID);
        if (bindSCid.getResult()) {
            return true;
        }
        return false;
    }

    /**
     * 对单个用户推送消息
     *
     * @param alias
     * @param msg
     * @return
     */
    public static boolean pushMessageToSingle(String cid, String text, String transMsg) {
        IGtPush push = new IGtPush(host, appKey, masterSecret);
        NotificationTemplate template = notificationTemplate("title", text, transMsg);
        SingleMessage message = new SingleMessage();
        message.setOffline(true);
        // 离线有效时间,单位为毫秒,可选
        message.setOfflineExpireTime(24 * 3600 * 1000);
        message.setData(template);
        // 可选,1为wifi,0为不限制网络环境。根据手机处于的网络情况,决定是否下发
        message.setPushNetWorkType(0);
        Target target = new Target();
        target.setAppId(appId);
        target.setClientId(cid);
        //target.setAlias(Alias);
        IPushResult ret = null;
        try {
            ret = push.pushMessageToSingle(message, target);
        } catch (RequestException e) {
            e.printStackTrace();
            ret = push.pushMessageToSingle(message, target, e.getRequestId());
        }
        if (ret != null && ret.getResponse() != null && ret.getResponse().containsKey("result")) {
            System.out.println(ret.getResponse().toString());
            if (ret.getResponse().get("result").toString().equals("ok") && ret.getResponse().containsKey("status")) {
                return true;
            }
        }
        return false;
    }

    /**
     * 指定应用的所有用户群发推送消息
     *
     * @param msg
     */
    public static boolean pushtoAPP(String title,String text, String transMsg) {
        IGtPush push = new IGtPush(host, appKey, masterSecret);

        NotificationTemplate template = notificationTemplate(title, text, transMsg);
        AppMessage message = new AppMessage();
        message.setData(template);

        message.setOffline(true);
        //离线有效时间,单位为毫秒,可选
        message.setOfflineExpireTime(24 * 1000 * 3600);
        //推送给App的目标用户需要满足的条件
        AppConditions cdt = new AppConditions();
        List<String> appIdList = new ArrayList<String>();
        appIdList.add(appId);
        message.setAppIdList(appIdList);
        //手机类型
        List<String> phoneTypeList = new ArrayList<String>();
        //省份
        List<String> provinceList = new ArrayList<String>();
        //自定义tag
        List<String> tagList = new ArrayList<String>();

        cdt.addCondition(AppConditions.PHONE_TYPE, phoneTypeList);
        cdt.addCondition(AppConditions.REGION, provinceList);
        cdt.addCondition(AppConditions.TAG, tagList);
        message.setConditions(cdt);

        IPushResult ret = push.pushMessageToApp(message, "msg_toApp");

        if (ret != null && ret.getResponse() != null && ret.getResponse().containsKey("result")) {
            System.out.println(ret.getResponse().toString());
            if (ret.getResponse().get("result").toString().equals("ok")) {
                return true;
            }
        }
        return false;
    }

    /**
     * 对单个用户推送透传消息
     *
     * @param alias
     * @param title
     * @param content
     * @return
     */
    public static boolean pushTransMessageToSingle(String cid, String msg) {
        TransmissionTemplate template = transTemplate(cid, msg);
        SingleMessage message = new SingleMessage();
        message.setOffline(true);
        // 离线有效时间,单位为毫秒,可选
        message.setOfflineExpireTime(24 * 3600 * 1000);
        message.setData(template);
        // 可选,1为wifi,0为不限制网络环境。根据手机处于的网络情况,决定是否下发
        message.setPushNetWorkType(0);
        Target target = new Target();
        target.setAppId(appId);
        target.setClientId(cid);
        IPushResult ret = null;
        try {
            ret = push.pushMessageToSingle(message, target);
        } catch (RequestException e) {
            e.printStackTrace();
            ret = push.pushMessageToSingle(message, target, e.getRequestId());
        }
        if (ret != null && ret.getResponse() != null && ret.getResponse().containsKey("result")) {
            System.out.println(ret.getResponse().toString());
            if (ret.getResponse().get("result").toString().equals("ok") && ret.getResponse().containsKey("status")) {
                return true;
            }
        }
        return false;
    }

    public static void pushMessageToIBatch(List<String> alias, String msg) {
        IBatch batch = push.getBatch();
        IPushResult ret = null;
        try {
            for (int i = 0; i < alias.size(); i++) {
                // 构建客户a的透传消息a
                constructClientTransMsg(alias.get(i), msg, batch);
            }
            // 构建客户B的点击通知打开网页消息b
            // constructClientLinkMsg(CID_B,"msgB",batch);
            ret = batch.submit();
        } catch (Exception e) {
            e.printStackTrace();
        }
        System.out.println(ret.getResponse().toString());
    }

    private static NotificationTemplate notificationTemplate(String title, String text, String obj) {
        NotificationTemplate template = new NotificationTemplate();
        // 设置APPID与APPKEY
        template.setAppId(appId);
        template.setAppkey(appKey);
        // 透传消息设置,1为强制启动应用,客户端接收到消息后就会立即启动应用;2为等待应用启动
        template.setTransmissionType(1);
        template.setTransmissionContent(obj);
        // 设置定时展示时间
        // template.setDuration("2015-01-16 11:40:00", "2015-01-16 12:24:00");
        Style0 style = new Style0();
        // 设置通知栏标题与内容
        style.setTitle(title);
        style.setText(text);
        // 配置通知栏图标
        style.setLogo("XXX");
        // 配置通知栏网络图标
        //style.setLogoUrl("");
        // 设置通知是否响铃,震动,或者可清除
        style.setRing(true);
        style.setVibrate(true);
        style.setClearable(true);
        template.setStyle(style);

        return template;
    }

    private static TransmissionTemplate transTemplate(String cid, String msg) {
        TransmissionTemplate template = new TransmissionTemplate();
        // 设置APPID与APPKEY
        template.setAppId(appId);
        template.setAppkey(appKey);
        template.setTransmissionContent(msg);
        template.setTransmissionType(0); // 这个Type为int型,填写1则自动启动app

        return template;
    }
    //点击通知打开应用模板
    public static void constructClientTransMsg(String cid, String msg, IBatch batch) throws Exception {

        SingleMessage message = new SingleMessage();
        NotificationTemplate template = new NotificationTemplate();
//        TransmissionTemplate template = new TransmissionTemplate();//自定义模板
        template.setAppId(appId);
        template.setAppkey(appKey);
        template.setTransmissionContent(msg);//消息内容
        template.setTransmissionType(1); // 这个Type为int型,填写1则自动启动app
        Style0 style = new Style0();        // 设置通知栏标题与内容
        style.setTitle("第一个通知");
        style.setText(msg);        // 配置通知栏图标
        style.setLogo("icon.png");        // 配置通知栏网络图标
        style.setLogoUrl("");//网络图标地址
        // 设置通知是否响铃,震动,或者可清除
        style.setRing(true);
        style.setVibrate(true);
        style.setClearable(true);
        template.setStyle(style);

        message.setData(template);
        message.setOffline(true);
        message.setOfflineExpireTime(60 * 60 * 1000);

        // 设置推送目标,填入appid和clientId
        Target target = new Target();
        target.setAppId(appId);
        target.setClientId(cid);
        batch.add(message, target);
    }

    //点击通知打开网页消息
    public static void constructClientLinkMsg(String cid, String msg, IBatch batch) throws Exception {

        SingleMessage message = new SingleMessage();
        LinkTemplate template = new LinkTemplate();
        template.setAppId(appId);
        template.setAppkey(appKey);
        template.setTitle("title");
        template.setText(msg);
        template.setLogo("push.png");
        template.setLogoUrl("logoUrl");
        template.setUrl("http://www.baidu.com");

        message.setData(template);
        message.setOffline(true);
        message.setOfflineExpireTime(60 * 1000);

        // 设置推送目标,填入appid和clientId
        Target target = new Target();
        target.setAppId(appId);
        target.setClientId(cid);
        batch.add(message, target);
    }
    public static void main(String[] args) throws IOException {

        IIGtPush push = new IGtPush(host, appKey, masterSecret);
        IBatch batch = push.getBatch();

        try {
           
            GetuiUtils.pushtoAPP("报警推送标题","推送测试内容","测试一下111111111111111111");
        } catch (Exception e) {
            e.printStackTrace();
        }
        batch.submit();
    }
}

4.IOS工具类 (查阅大量资料,发现ios个推只能使用透传)

package com.lgoms.web.Task;


import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.gexin.rp.sdk.base.IPushResult;
import com.gexin.rp.sdk.base.impl.AppMessage;
import com.gexin.rp.sdk.base.impl.SingleMessage;
import com.gexin.rp.sdk.base.impl.Target;
import com.gexin.rp.sdk.base.payload.APNPayload;
import com.gexin.rp.sdk.http.IGtPush;
import com.gexin.rp.sdk.template.TransmissionTemplate;
 
public class IosGetuiUtils {
	private static String appId = "";
    private static String appKey = "";
    private static String masterSecret = "";
    public static String url = "https://sdk.open.api.igexin.com/apiex.htm";
	 //appId ,appKey ,masterSecret 填写自己应用的
	
	public static TransmissionTemplate getTemplate(String title,String messages,String content) {
	    TransmissionTemplate template = new TransmissionTemplate();
	    template.setAppId(appId);
	    template.setAppkey(appKey);
	    template.setTransmissionContent(content);
	    template.setTransmissionType(2);
	    APNPayload payload = new APNPayload();
	    //在已有数字基础上加1显示,设置为-1时,在已有数字上减1显示,设置为数字时,显示指定数字
	    payload.setAutoBadge("+1");
	    payload.setContentAvailable(0);
	    //ios 12.0 以上可以使用 Dictionary 类型的 sound
	    payload.setSound("default");
	    payload.setCategory("$由客户端定义");
	    Map<String,String> map = new HashMap<String,String>();
	    map.put("type", "0");
	    map.put("text", messages);
	    payload.addCustomMsg("payload", map);
	    //字典模式使用APNPayload.DictionaryAlertMsg
	    payload.setAlertMsg(getDictionaryAlertMsg(title,messages));
	    //设置语音播报类型,int类型,0.不可用
	    payload.setVoicePlayType(0);
	    template.setAPNInfo(payload);
	    return template;
	}
	private static APNPayload.DictionaryAlertMsg getDictionaryAlertMsg(String title,String messages){
	    APNPayload.DictionaryAlertMsg alertMsg = new APNPayload.DictionaryAlertMsg();
	    alertMsg.setBody(messages);
	    alertMsg.setActionLocKey("ActionLockey");
	    alertMsg.setLocKey("LocKey");
	    alertMsg.addLocArg("loc-args");
	    alertMsg.setLaunchImage("launch-image");
	    // iOS8.2以上版本支持
	    alertMsg.setTitle(title);
	    alertMsg.setTitleLocKey("TitleLocKey");
	    alertMsg.addTitleLocArg("TitleLocArg");
	    return alertMsg;
	}
	
	public static String IosPushApps(String title,String messages,String content) {
		 	IGtPush push = new IGtPush(url, appKey, masterSecret);
	        TransmissionTemplate template =getTemplate(title,messages,content);
	        List<String> appIds = new ArrayList<String>();
	        appIds.add(appId);
	        AppMessage message = new AppMessage();
	        message.setData(template);
	        message.setAppIdList(appIds);
	        message.setOffline(true);
	        message.setOfflineExpireTime(1000 * 600);  // 时间单位为毫秒

	        // STEP6:执行推送
	        IPushResult ret = push.pushMessageToApp(message);
	        System.out.println(ret.getResponse().toString());
			return ret.getResponse().toString();
	}
	
	public static void main(String[] args) throws IOException {
		IosGetuiUtils.IosPushApps("推送测试标题","测试内容","消息内容content");

	  }
}

使用以上工具类  在程序中调用即可!

 

官方参考文档:http://docs.getui.com/getui/server/java/guide/

点赞
  1. 靓仔说道:
    Firefox Windows 10

    靓仔

发表评论

电子邮件地址不会被公开。必填项已用 * 标注