Android集成友盟推送

本文详细介绍了友盟推送的接入过程,包括准备工作、官方示例的使用、SDK初始化、离线推送实现等内容,并分享了解决过程中遇到的问题。

这几天一直在做Android 消息推送接入前的准备工作
特此在这里将自己在加载第三方推送时出现的问题以及详细的接入步骤进行记录,已免后者踩坑

为什么选择友盟推送?

在刚开始准备接入消息推送时 首先我先想到的是极光推送,在大概看了一遍他们的接入流程并且根据他们的文档做了一个demo后,因为是第一次接入推送,所以不太清楚在app离线情况下是如何接收到推送的流程,在积极和他们的业务人员沟通后也没有得到一个我想要的回答 可能是因为自身原因(但是服务挺好的 会把你拉到一个相关的群聊里面 你可以和他们技术进行沟通 )。。。最后没选择激光推送的原因是他们的收费标准不清晰和两个业务员沟通得到的答复都不太一样 。然后在学长的推荐下查看了友盟推送。对于友盟的第一印象就是感觉他们的文档写的很通俗易懂,并且非常棒的一点是还提供了视频教学,虽然视频长度很短,但是该表达的都表现出来了,还是很赞的。当然了,最后也是最重要的一点就是他们的推送是分为免费版和Pro版的,免费版的完全够日常的使用。
在这里插入图片描述

接入前的准备:

  1. 友盟官方接入文档概述
    这里推荐大家使用最新版的SDK (Push SDK 6.1.0及之后才支持AndroidQ)
  2. 友盟推送产品后台管理
  3. 友盟推送官方demo
  4. 新手引导 如果你还没接触过友盟推送,建议先看一下推送集成的流程

打开官方示例

当我们从官网下载好推送的demo,因为是一个完整的项目直接编译即可。
编译完成后先不着急运行,我们首先需要在友盟推送产品后台管理新建一个新应用
在这里插入图片描述

这里测试阶段你可以先填入当前demo的详细包名,点击确认添加后就会进入到配置向导界面
在这里插入图片描述
这里你就可以拿到应用唯一的AppKey,Uming Message Secret,App Master Secret 这三个值很重要后期我们需要使用他们。

初始化SDK

进入我们的Android demo的MyApplication中,在UMConfigure.init()方法中分别填入我们的应用申请的Appkey和Umeng Message Secret对应信息

 UMConfigure.init(this, "your appkey", "Umeng", UMConfigure.DEVICE_TYPE_PHONE, "umeng message secret");

然后运行一下我们的项目,拿到你设备专属的device_token
在这里插入图片描述
然后这时,进入我们的友盟推送后台管理,点击测试模式->创建测试任务
在这里插入图片描述
在创建测试任务最后一步点击完成
在这里插入图片描述
这时等待几秒钟后你的app就会接收到消息通知,(请先确保当前demo在前台)

在这里插入图片描述
欧克,到这一步我们就算接入成功我们的测试demo了,当然了这只算是刚刚开始,点击该通知就会自动跳转到我们的app中去,当然这里可以自定义我们收到通知后点击通知会跳转到的特定页面或者指定url等等,这里可以在后续动作进行设置,当然你也可以传递参数,我们再来新建一个测试任务测试一下吧

在这里插入图片描述
这里我们设置当用户接收到通知点击通知时跳转到我们指定的页面中,并且传递了参数,注意这里的指定页面必须要填写全路径。
这时你是不是想,这就结束了,原来接入推送这么简单啊 !
那你就错了哦,当前我们接入的是在线推送哦,这里先清除你的当前demo的任务,使app处于离线状态下,我们在来新建一个测试任务,点击发送你会发现接收不到该通知

离线推送

厂商推送

厂商推送指的就是手机硬件厂商提供的系统级别的推送服务。因为她是系统服务,随手机开机后她就一直存在着,有效地保证了推送通道的高可用性。在网络畅通和推送消息内容合法的情况下,通过厂商通道推送消息给该型号手机,不论应用是否存活,都保证消息推送到位。

友盟厂商通道接入

厂商通道接入详细文档
直接跟着文档一步步走就行了,里面有详细的接入步骤,效果图以及链接
点此链接即可获得神功!
这里需要注意的是:厂商推送账号必须注册为企业认证账号

发送离线推送

其实这里和在线推送略有差别
在这里插入图片描述
当我们集成好厂商通道后并完善我们的应用信息后,在这里点击勾选厂商通道,填入要打开的指定页面(必填)点击发送,当我们的app在离线状态下也可以接收到消息推送咯(这里上传的是我集成demo)。

在这里插入图片描述

在这里插入图片描述
app内接收到的参数:
在这里插入图片描述

第一个坑

这里我在离线推送有问题的时候和友盟的人工客服沟通,他非常坚定地告诉我离线推送消息后续行为只能设置为打开应用并且不可以传参,当时我就懵了,我跟他说不能传参我咋判断跳转到指定页面的业务逻辑处理呢,他也没给我具体的说法最后好像不了了之了

第二个坑

在我使用离线推送去推消息时,我测试了两种情况,分别时app运行在前台和清空后台任务两种情况,当我设置后续行为为打开应用推离线消息时,app离线状态下点击通知会跳转到指定界面(这里指的是勾选厂商推送后填写跳转的指定界面,不是行为动作跳转指定界面),但是当app在前台时点击通知不会跳转到指定界面,因为这里我们的后续行为设置的就是打开应用,我又和他们客服进行沟通,期间分别时和两个客服进行了沟通,但是两个给我的答复居然还都不一样,并且说没办法,然后还说让我推送时推送两个,一个在线的一个离线的 ,我感觉他就是在瞎扯,我说他们技术在实现功能时肯定有考虑这一点,然后我强烈要求和他们技术进行沟通,最后也没和他们技术进行沟通,不过最后也是找到了解决方法,就是在发送离线通知时,想行为动作也设置为跳转到指定页面,这样发送离线消息,不管是app离线还是在线都可以接收到信息,并且点击通知还可以跳转到指定界面,最后也是了解到,当app离线时走的时厂商通道,在线时走的时友盟通道,所以为了实现不管app在不在线直接设定两种都为跳转到指定页面的话都会执行这个结果。
这里忍不住吐槽友盟了,每个客服说的内容都相差太大,与实际不符,并且我们在接入时遇到的都是技术方面的问题,但是还不能和技术有一个很好的沟通,这点没有极光做的好,不过文档还是非常详细的。

这就是详细的接入步骤了,这里贴出我的跳转指定页面的activity

public class SecondActivity extends UmengNotifyClickActivity {
   
   

    @Override
    protected void onCreate(Bundle savedInstanceState) {
   
   
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);
        init();
    }

    private void init() {
   
   
        Bundle bun = getIntent().getExtras();
        if (bun != null) {
   
   
            Set<String> keySet = bun.keySet();
            for (String key : keySet) {
   
   
                String value = bun.getString(key);
                Log.i("testww", "#"+value);
                //Toast.makeText(this,"@"+value,Toast.LENGTH_SHORT).show();
            }
        }
    }

    @Override
    protected void onNewIntent(Intent intent) {
   
   
        super.onNewIntent(intent);
        setIntent(intent);

    }

    @Override
    public void onMessage(Intent intent) {
   
   
        super.onMessage(intent);
        Log.i("unlineintent", "onMessage-------->");
        String body = intent.getStringExtra(AgooConstants.MESSAGE_BODY);
        Log.i("unlineintent", body);
    }
}

服务端代码调用

这里有两种方式在后台调用,分别时调用API的方式和服务端调用
服务端下载地址
在这里插入图片描述
这里推荐使用JAVA sdk的方式进行下载,因为其它两个都太老了

当然你也可以选择直接调用API, 详情请戳->

这里我也下载了服务端代码,并且进行了稍微的修改,在Demo.java文件中新增了列播功能

       //列播
		public void sendAndroidListcast() throws Exception {
   
   
			AndroidListcast listcast = new AndroidListcast(appkey,appMasterSecret);
			// TODO Set your device token
			listcast.setDeviceToken( "Aif9eEilatT-3JOYQJDm1HXmVh_S-2QLuoRH4let4tQd,");
			listcast.setTicker( "通知栏提示文字");
			listcast.setTitle(  "通知标题");
			listcast.setText(   "通知文字描述");
			//点击"通知"的后续行为,默认为打开app。
			//unicast.goAppAfterOpen();
			listcast.goActivityAfterOpen("com.example.wow.SecondActivity");
			listcast.setDisplayType(AndroidNotification.DisplayType.NOTIFICATION);
			// TODO Set 'production_mode' to 'false' if it's a test device. 
			// For how to register a test device, please see the developer doc.
			//正式模式 默认为true 
			listcast.setProductionMode();
			// Set customized fields
			listcast.setExtraField("test", "helloworld");
			listcast.setExtraField("state", "
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

安东尼肉店

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值