Aliyun 移动推送对接 之 服务器推送Demo

前言

前一段时间一直在调查阿里的移动推送,文档看得差不多了,接下来想写个demo验证一下自己的理解,是否真的能落地实施。根据以往的经验,每个人每次对接第三方资源,总会遇到这样那样相似的问题。

作为一名后端开发,对Android开发只是略知一二,不知道有多少不知道。在写Flutter的demo中,遇到不少问题。这些问题对于熟悉Android开发的同学来说,只不过是小菜一碟,但还是有必要记录一下,留给有需要的同学,希望能为他们的对接工作节约时间。


服务器端推送Demo:

一、官方对接参考文档

Java代码参考:https://help.aliyun.com/document_detail/48048.html
参数说明:https://help.aliyun.com/document_detail/48089.html
高级推送代码参考:https://help.aliyun.com/document_detail/48089.html

二、pom.xml jar的引入

        <dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>aliyun-java-sdk-push</artifactId>
            <version>3.13.6</version>
        </dependency>
        <dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>aliyun-java-sdk-core</artifactId>
            <version>[4.3.2,5.0.0)</version>
        </dependency>

三、Java代码

import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.exceptions.ServerException;
import com.aliyuncs.profile.DefaultProfile;
import com.aliyuncs.push.model.v20160801.PushRequest;
import com.aliyuncs.push.model.v20160801.PushResponse;
import com.google.gson.Gson;
/**
 * 阿里云推送demo
 * @author 程就人生
 * @Date
 */
public class AliyunPush {

    public static void main(String[] args) {
    	
    	// 你在阿里云移动推送创建应用产生的appKey
    	Long appKey = 0L;
    	
    	// 你在阿里云推送注册账号产生的accessKeyId、accessSecret
    	String accessKeyId = "accessKeyId";    	
    	String accessSecret = "accessSecret";
    	
    	// 选择推送消息的区域
    	String regionId = "cn-shanghai";
    	    	
        DefaultProfile profile = DefaultProfile.getProfile(regionId, accessKeyId, accessSecret);
        IAcsClient client = new DefaultAcsClient(profile);

        PushRequest request = new PushRequest();
        request.setAppKey(appKey);
        // 推送类型:MESSAGE:表示消息、NOTICE:表示通知
        request.setPushType("NOTICE");
        // 设备类型:iOS:iOS设备、ANDROID:Android设备、ALL:全部设备类型
        request.setDeviceType("ALL");
        // 推送目标 DEVICE:根据设备推送、ACCOUNT:根据账号推送、ALIAS:根据别名推送、TAG:根据标签推送、ALL:推送给全部设备
        request.setTarget("ALL");
        // 根据Target来设定,如果target为DEVICE时,这里填充deviceId1,deviceId2
        request.setTargetValue("ALL");
        // 在线时,接收到通知的标题和内容
        request.setTitle("在线标题");
        request.setBody("在线内容");
                        
        // 通知渠道channelID,Andorid 8及以上必须填写,和移动端配置保持一致,否则移动端收到的通知不能在通知栏展示
        request.setAndroidNotificationChannel("1");
              
        // 离线消息/通知是否保存
        request.setStoreOffline(true);
                
        // 点击通知后动作。可取值:APPLICATION:打开应用(默认值)、ACTIVITY:打开应用AndroidActivity、URL:打开URL、NONE:无跳转
        request.setAndroidOpenType("ACTIVITY");
        // 与通知跳转类型相匹配,如果设置了ACTIVITY,那么AndroidActivity就必须填写
        request.setAndroidActivity("com.example.MainActivity");
        
        // 离线状态下必须配置的几个参数,否则接收不到离线消息
        request.setAndroidPopupActivity("com.example.MainActivity");
        // 离线状态下,接收到通知的标题和内容
        request.setAndroidPopupTitle("离线通知标题");
        request.setAndroidPopupBody("离线通知内容");

        try {
            PushResponse response = client.getAcsResponse(request);
            System.out.println(new Gson().toJson(response));
        } catch (ServerException e) {
            e.printStackTrace();
        } catch (ClientException e) {
            System.out.println("ErrCode:" + e.getErrCode());
            System.out.println("ErrMsg:" + e.getErrMsg());
            System.out.println("RequestId:" + e.getRequestId());
        }
    }
}

四、测试

当在控制台输出以下字样时,代表服务器端推送成功了:
服务器端移动推送运行图

五、在对接过程中遇到的几个问题:

1.参数配置错误

appKey、accessKeyId、accessSecret,这三个参数,随便哪个参数写错了,控制台就会报错,这个时候就根据错误提示解决即可。
参考文档:https://help.aliyun.com/document_detail/175967.html?spm=a2c4g.11186623.0.0.2e133c6bynJaqo

2.服务器端推送的通知,在移动端不能在通知栏展示?

服务器端的通道ID AndroidNotificationChannel 必须和移动端通道ID保持一致,移动端配置文件里是必须配置的,如果服务器端的通道ID不写,那么移动端就不能在通知栏展示通知,接收到的通知会变成在线才能接收到的消息。这个在文档里说明的并不详细。
参考文档:https://help.aliyun.com/document_detail/67398.html?spm=a2c4g.11186623.0.0.31ec5249vyD2hv

3.离线通知收不到?

AndroidPopupActivity、AndroidPopupTitle、AndroidPopupBody这三个参数必填,如果不填写,就接收不到离线消息。这也是需要特别注意的地方。

4.开发者门户调试,移动端收不到通知?

建议使用 推送高级接口 的开发者门户调试工具,其他简易接口:推送通知给Android设备等接口就不要尝试了,如果手机是Android8.0及以上版本,可能会收不到通知,因为这些Api里面的参数不全,没地方填充,在服务端的统计列表里,也不会有任何报错,找不到问题出现在哪里。
登录阿里云后台,推送高级接口会自动获取配置参数,url地址为:https://next.api.aliyun.com/api/Push/2016-08-01/Push?spm=api-workbench…0.0.5a5b1e0f6HwFCj&params={}

这几个问题,刚开始总以为是移动端demo的问题,因为在阿里云的推送记录里,没有任何报错信息。其实是服务器端参数设置的问题,官方文档比代码更新有延迟,确实会让很多第一次对接的伙伴在这里浪费不少时间。另外在写服务端代码时,最好多参考几个官方文档demo,有些参数的作用说的不是太明确,还需要找技术支持核实一下。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值