【友盟推送】与【腾讯信鸽推送】

友盟推送文档:

https://developer.umeng.com/docs/66632/detail/68343#h1-u670Du52A1u7AEFu4EE3u7801u8C03u7528u793Au4F8B5

服务端代码调用:

直接下载java代码的SDK (我用的v1.5)

把SDK中的src下的push包下的代码全copy到项目中,删除App.java,而Demo.java文件中注意的是context推送的内容,安卓端的话需要注意title标题。Demo.java中有个main方法,可直接调试使用,需要更改其中的key与Secret【设为自己的】。

写一个常量类或.xml或.yml放AndroidKey、AndroidSecret和AndroidMessageSecret;IOSKey和IOSSecret。

Demo.java直接调用这些静态常量,方便以后更变。

遇到的问题:跟信鸽推送有一些相似,这里就不多说,请往下继续阅读。

================================

信鸽推送:【信鸽推送的技术支持者微信号 xg_Push,不懂的可以直接联系他】

【服务端】

信鸽封装了自己的jar,或者是好心人放Maven上的,直接引用jar包。

new XingeApp()  通过这个对象可以直接调用给Android的指定Token推送 | 指定的账户推送 | 指定的Tag推送。

而我使用时,直接调用他封装好的方法,推送json内容,安卓端与IOS端不好处理数据,甚至有时候推送内容直接显示json数据

【android与ios端】

最初选用的是token(设备号-唯一),使用token服务端不好控制。[遇到的问题:一个token设备上绑定多个用户,导致多个账户都能在这个设备上搜到推送;传递的参数:设备类型(安卓 | IOS),token;处理方式登录时存到数据库或redis,退出时清空,但是有些用户不会理智的选择退出登录,而是直接卸载软件,甚至他又安装上,登录其他号,这时候给以前的号推送的东西还是到这个设备上了...]

最终选择处理方式为:[安卓|IOS使用账号推,登录时绑定账号,退出时解绑账号,而也感谢信鸽提供了账号唯一绑定接口,文档上说明了当B用户登录会把以前的A用户顶掉,3.2.2 + 版本有效。服务端的处理方式为登录时,通过切面对请求判断属于安卓还是IOS,以用户ID做为KEY,设备类型为VALUE,存redis的Hash类型中,有效期等于session有效期,推送的时候从这个标记中取出来判断这个用户用的是安卓手机还是IOS手机,然后推送。而有些业务场景要求不严,可以两边都进行推送。]

下面是我写的工具类:【注意点accessAndSecretKeyConfig还有就是PushVO】

import com.tencent.xinge.ClickAction;
import com.tencent.xinge.Message;
import com.tencent.xinge.MessageIOS;
import com.tencent.xinge.XingeApp;
import lombok.extern.slf4j.Slf4j;
import org.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;
import java.util.HashMap;
import java.util.Map;

/**
 * 自建信鸽的调用公共方法类 【注意静态方法中加载可控常改数据时】
 * Created by Love丶TG on 2018/9/3 12:09.
 */
@Slf4j
@Component
public class PushUtils {

    // 来与.yml数据源ConfigurationProperties
    @Autowired
    private AccessAndSecretKeyConfig accessAndSecretKeyConfig;

    public static PushUtils pushUtils;

    @PostConstruct
    public void init() {
        pushUtils = this;
    }

    //获取android的Xinge
    private static XingeApp getAndroidXinge() {
        XingeApp xinge = new XingeApp(pushUtils.accessAndSecretKeyConfig.getAccessId(),
                pushUtils.accessAndSecretKeyConfig.getSecretKey());
        return xinge;
    }

    //获取Ios的Xinge
    private static XingeApp getIOSXinge() {
        XingeApp xinge = new XingeApp(Long.valueOf(pushUtils.accessAndSecretKeyConfig.getIosAccess()),
                pushUtils.accessAndSecretKeyConfig.getIosSecretKey());
        return xinge;
    }

    /**
     * IOS指定用户ID推送
     *
     * @param bean
     * @return
     */
    public static JSONObject pushAccountIos(PushVO bean) {
        MessageIOS messageIOS = new MessageIOS();
        messageIOS.setType(MessageIOS.TYPE_APNS_NOTIFICATION);
        messageIOS.setExpireTime(86400);//默认离线七天
        messageIOS.setAlert(bean.getTitle());
        messageIOS.setBadge(1);
        messageIOS.setCategory(bean.getContent());
        messageIOS.setSound("beep.wav");
        Map<String, Object> custom = new HashMap<>();
        custom.put("data", bean.getJsonContent());
        messageIOS.setCustom(custom);
        XingeApp xinge = getIOSXinge();
        if (pushUtils.accessAndSecretKeyConfig.getIosXG()) {
            return xinge.pushSingleAccount(0, bean.getUserId(), messageIOS, XingeApp.IOSENV_PROD);
        }
        return xinge.pushSingleAccount(0, bean.getUserId(), messageIOS, XingeApp.IOSENV_DEV);
    }

    /**
     * Android指定用户ID推送
     *
     * @param bean
     * @return
     */
    public static JSONObject pushAccountAndroid(PushVO bean) {
        Message message = new Message();
        message.setType(Message.TYPE_NOTIFICATION);
        ClickAction action = new ClickAction();
        action.setActionType(ClickAction.TYPE_ACTIVITY);
        action.setActivity("activity");
        Map<String, Object> custom = new HashMap<>();
        custom.put("data", bean.getJsonContent());
        message.setTitle(bean.getTitle());
        message.setContent(bean.getContent());
        message.setAction(action);
        message.setCustom(custom);

        XingeApp xinge = getAndroidXinge();
        return xinge.pushSingleAccount(0, bean.getUserId(), message);
    }
}

调用:

(IOS)PushUtils.pushAccountIos(bean)

(安卓)PushUtils.pushAccountAndroid(bean);

============================结束,感谢您的关注!=======================

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
包含客户端和服务端 代码 亿级并发,秒级触达 稳定的大规模接入集群,同时与数亿移动智能终端保持稳定的长连接,支持十亿级并发 秒级触达用户,每天可发送百亿级的通知/消息 最省电省流量方案 智能识别网络环境,根据不同环境定制通讯协议,以最低消耗维护长连接,做到极致省电省流量 通知及消息高度压缩,节省流量的同时加密保证安全性 丰富标签,精准定向 特定标签人群,团队测试用户,全量用户,单个用户等多种推送范围选择 及时稳定地将信息送达到最相关的用户,形成用户粘性,避免骚扰 开放API接口,灵活自定义推送 开放推送能力,提供多种语言API ,包括Java/PHP/Python/Node.js,业务自由集成 可视效果,实时监控 实时监控通知/消息的抵达用户量,点击转化量,点击转化率,推送效果一目了然 使用方法 登录后,创建应用,获取应用的唯一识别码AccessKey和密钥SecretKey; 下载对应平台的SDK,并参考开发文档完成SDK集成; 通过API调用或Web业务端方便快速地完成推送测试和实际发送,并实时查看推送效果。 使用场景 通知,定义为Android和iOS开发者指南中的Notifidoveion。服务器定向将信息实时送达手机,通过建立一条手机与服务器的连接链路,当有消息需要发送到手机时,通过此链路发送即可。通过推送一条用户可见的信息,引导用户进行有目的性的操作。通常用于产品信息知会、新闻推送和个性化消息等场景。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值