该博客不为学术讨论,仅是记录,方便以后用到快速集成开发,有兴趣者可以mark一下以备使用。当然也为推送的小白提供方便。

因为公司内部有第三方安全检测机构,所以用某光推送时,因为极光推送原理是会通过其他集成了某光推送的App通道来推送,所以经常审核被pass,所以采用了阿里云移动推送。

前置步骤:

1. 登录阿里云官网,开通服务

 2. 创建工作空间

这里随便输入工作空间名字,看你自己的想法

 3.添加应用

这个就不用过多累述了吧,输入应用名称,包名,图标(后期建议不要更改了,不然还得改配置文件)

记得下载这个  aliyun-emas-services.json 配置文件

二、Android端集成(总算进入代码部分)

1.各种集成

在外部的build.gradle中添加如下代码 , 自己比着添加吧,不要傻傻都复制

buildscript {repositories {google()mavenCentral()maven {url 'http://maven.aliyun.com/nexus/content/repositories/releases/'}}dependencies {classpath "com.android.tools.build:gradle:4.2.2"//添加emas-services插件classpath "com.aliyun.ams:emas-services:1.0.1"}
}allprojects {repositories {google()mavenCentral()jcenter() //分界线maven {url 'http://maven.aliyun.com/nexus/content/repositories/releases/'}// 配置HMS Core SDK的Maven仓地址。maven {url 'https://developer.huawei.com/repo/'}}
}

2. gradle.properties文件添加如下

android.useDeprecatedNdk=true
//下面这个看情况,我是用于 我这边构建的时候总会提示AndroidMainfest.xml merge错误,需要在
//application 下添加 tools:replace="allowBackup",与这个配合就行了,正常情况下不需要加下面这行
android.enableJetifier=true

3. 把之前下载的aliyun-emas-services.json放到app目录下

 4. 在app目录下的buildl.gradle下配置如下

plugins {id 'com.android.application'//配置阿里云插件id 'com.aliyun.ams.emas-services'
}android {compileSdkVersion 30defaultConfig {...//配置ndkndk {//选择要添加的对应cpu类型的.so库。abiFilters 'armeabi-v8a','armeabi','armeabi-v7a','mips','mips64','x86','x86_64'}}...
}dependencies {...//添加阿里云推送依赖,版本看你现在用的是多少版本compile 'com.aliyun.ams:alicloud-android-push:3.4.0'
}

 5. 编写MyApplication,用于软件一启动初始化并注册推送


import android.app.Application;
import android.content.Context;
import android.util.Log;
import com.alibaba.sdk.android.push.CloudPushService;
import com.alibaba.sdk.android.push.CommonCallback;
import com.alibaba.sdk.android.push.noonesdk.PushServiceFactory;public class MyApplication extends Application {private static final String TAG = "Init";@Overridepublic void onCreate() {super.onCreate();initCloudChannel(this);}/*** 初始化云推送通道* @param applicationContext*/private void initCloudChannel(Context applicationContext) {PushServiceFactory.init(applicationContext);CloudPushService pushService = PushServiceFactory.getCloudPushService();pushService.register(applicationContext, new CommonCallback() {@Overridepublic void onSuccess(String response) {Log.d(TAG, "init cloudchannel success");}@Overridepublic void onFailed(String errorCode, String errorMessage) {Log.d(TAG, "init cloudchannel failed -- errorcode:" + errorCode + " -- errorMessage:" + errorMessage);}});}
}

6. 编写接收者MyMessageReceiver


import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.content.Context;
import android.graphics.Color;
import android.os.Build;
import android.util.Log;import com.alibaba.sdk.android.push.MessageReceiver;
import com.alibaba.sdk.android.push.notification.CPushMessage;import java.util.Map;public class MyMessageReceiver extends MessageReceiver {// 消息接收部分的LOG_TAGpublic static final String REC_TAG = "receiver";@Overridepublic void onNotification(Context context, String title, String summary, Map<String, String> extraMap) {// TODO 处理推送通知Log.e("MyMessageReceiver", "Receive notification, title: " + title + ", summary: " + summary + ", extraMap: " + extraMap);//这里是针对高版本安卓部分7.0以上和8.0以上收不到通知的做法,加入channel渠道if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {NotificationManager mNotificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);// 通知渠道的id。String id = "1";// 用户可以看到的通知渠道的名字。CharSequence name = "notification channel";// 用户可以看到的通知渠道的描述。String description = "notification description";int importance = NotificationManager.IMPORTANCE_HIGH;NotificationChannel mChannel = new NotificationChannel(id, name, importance);// 配置通知渠道的属性。mChannel.setDescription(description);// 设置通知出现时的闪灯(如果Android设备支持的话)。mChannel.enableLights(true);mChannel.setLightColor(Color.RED);// 设置通知出现时的震动(如果Android设备支持的话)。mChannel.enableVibration(true);mChannel.setVibrationPattern(new long[]{100, 200, 300, 400, 500, 400, 300, 200, 400});// 最后在notificationmanager中创建该通知渠道。mNotificationManager.createNotificationChannel(mChannel);}}@Overridepublic void onMessage(Context context, CPushMessage cPushMessage) {Log.e("MyMessageReceiver", "onMessage, messageId: " + cPushMessage.getMessageId() + ", title: " + cPushMessage.getTitle() + ", content:" + cPushMessage.getContent());}@Overridepublic void onNotificationOpened(Context context, String title, String summary, String extraMap) {Log.e("MyMessageReceiver", "onNotificationOpened, title: " + title + ", summary: " + summary + ", extraMap:" + extraMap);}@Overrideprotected void onNotificationClickedWithNoAction(Context context, String title, String summary, String extraMap) {Log.e("MyMessageReceiver", "onNotificationClickedWithNoAction, title: " + title + ", summary: " + summary + ", extraMap:" + extraMap);}@Overrideprotected void onNotificationReceivedInApp(Context context, String title, String summary, Map<String, String> extraMap, int openType, String openActivity, String openUrl) {Log.e("MyMessageReceiver", "onNotificationReceivedInApp, title: " + title + ", summary: " + summary + ", extraMap:" + extraMap + ", openType:" + openType + ", openActivity:" + openActivity + ", openUrl:" + openUrl);}@Overrideprotected void onNotificationRemoved(Context context, String messageId) {Log.e("MyMessageReceiver", "onNotificationRemoved");}
}

7. 最后在清单文件AndroidMainfest.xml中配置,权限可配可不配,因为依赖中已经申请了这些权限,注意:对于oppo手机和vivo手机,我记得通知默认是不打开的,所以需要开启后测试

<!-- 阿里云推送相关权限 --><uses-permission android:name="android.permission.INTERNET" /><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /><uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /><uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /><uses-permission android:name="android.permission.READ_PHONE_STATE" /><uses-permission android:name="android.permission.WAKE_LOCK" /><uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /><uses-permission android:name="android.permission.GET_TASKS"/><uses-permission android:name="android.permission.REORDER_TASKS"/><!-- 接收推送主要权限 --><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/><uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/><application...<meta-data android:name="com.alibaba.app.appkey" android:value=""/> <!-- 请填写你自己的- appKey --><meta-data android:name="com.alibaba.app.appsecret" android:value=""/> <!-- 请填写你自己的appSecret -->...<!-- 消息接收监听器 (用户可自主扩展) --><receiverandroid:name=".receiver.MyMessageReceiver"android:exported="false"> <!-- 为保证receiver安全,建议设置不可导出,如需对其他应用开放可通过android:permission进行限制 --><intent-filter><action android:name="com.alibaba.push2.action.NOTIFICATION_OPENED" /></intent-filter><intent-filter><action android:name="com.alibaba.push2.action.NOTIFICATION_REMOVED" /></intent-filter><intent-filter><action android:name="com.alibaba.sdk.android.push.RECEIVE" /></intent-filter></receiver></application>

到此全部结束,至于你的秘钥在哪,到阿里云控制台,点击一下你的应用就能看到了

三、测试

还要一点要注意,推送通知里,由于高版本需要设置channelId,所以选择推送通知里的高级设置输入chennelId即可,在上面代码里,我写的channelId是1

记得看下它的定价:

本人个人原创,如有雷同,纯属巧合,或者与本人联系,做改动。请转载或者CV组合标明出处,谢谢!(如有疑问或错误欢迎指出,本人QQ:752231513)

Android 集成阿里云移动推送相关推荐

  1. Android集成阿里云消息推送的方法步骤

    一 创建App应用 1.1 在控制台发(https://mhub.console.aliyun.com)的App列表页,点击页面产品列表中"添加产品"的图标即可创建一个新的产品(产 ...

  2. 友盟推送和阿里云移动推送使用注意事项、不同点比较

    友盟推送和阿里云移动推送,都属于阿里系的产品,在使用上很大一部分还是很相似的,阿里云将移动推送.移动热修复.移动测试.移动数据分析和移动用户反馈集成到了一块,所有的远程依赖也都是集成在一起了,然而友盟 ...

  3. 阿里云移动推送服务java调用

    阿里云移动推送服务java调用 首先登录阿里云官网,开通移动推送服务 创建app和平台 配置应用 测试推送 根据文档编写自己的调用方法 测试推送 ##具体步骤如下: 登录阿里云官网 https://w ...

  4. 基于阿里云移动推送的移动应用推送模式最佳实践

    摘要: ### 一.概念 以下概念对应系统设计时的语义,对于如何合理使用移动推送有借鉴意义 #### 1.1 设备 安装并使用开发者移动应用的装置 #### 1.2 设备ID 阿里云移动推送为设备分配 ...

  5. 阿里云移动推送服务使用教程

    产品概述: 阿里移动推送(Alibaba Cloud Mobile Push)是基于大数据的移动智能推送服务,帮助App快速集成移动推送的功能,在实现高效.精确.实时的移动推送的同时,极大地降低了开发 ...

  6. 解决.NET Core中MailKit无法使用阿里云邮件推送服务的问题

    在博问中(.net core怎么实现邮件发送)知道了MailKit无法使用阿里云邮件推送服务发送邮件的问题,自已实测也遇到同样的问题,而用自己搭建的邮件服务器没这个问题. 于是,向阿里云提交了工单.. ...

  7. 使用阿里云邮件推送服务架设自己邮件验证与推送体系

    提示:阅读本文需提前了解的相关知识 1.电子邮件协议(http://baike.baidu.com/view/2367542.htm) 2.阿里云邮件推送(https://www.aliyun.com ...

  8. 阿里云-邮件推送 配置 购买域名 配置域名

    阿里云-邮件推送 配置 购买域名 配置域名 1.邮件推送是什么: 2.为什么要用它 3.如何使用? 3.1 第一步:创建发信域名 第二步. 创建发信地址 第三步. 再创建一个模板,这个需要审核. 最后 ...

  9. Java实现邮箱发送(阿里云邮箱推送)

    Java mail邮箱发送 1. 邮箱信息实体类 2. jar包依赖 3. 发送邮箱实现 绑定阿里云域名,创建域名账户,并配置解析域名账户,获得发送邮箱的权限,上限两百封,超出要¥- 阿里云邮件推送控 ...

最新文章

  1. NSWindow添加NSViewController
  2. HDU 1561 The more, The Better
  3. threejs 物体根据相机位置显示_认识Threejs
  4. redis入门——客户端篇
  5. Windows 10 环境VS报表rdlc 中文乱码解决方案
  6. 达人评测 i510400f和i511400f区别 i5 11400f和i5 10400f对比
  7. java面试题笔试常见选择题大全含答案
  8. 配置文件填写内网地址和127.0.0.1的区别
  9. python 调用函数
  10. 21年杭州云栖大会参会总结-安全相关内容
  11. python分块处理功能_Python自然语言处理学习笔记之信息提取步骤分块(chunking)...
  12. [GIS] 火星坐标GCJ-02的实质 | 高德地图的实际坐标系
  13. MBR膜生物反应器,生物反应器原理-世来福
  14. Word 2010之简单图文混排
  15. 【转】MATLAB的数组期望和方差
  16. Android访问网络资源
  17. Linux-搭建web服务器
  18. 坚果投影仪陷入双11刷单漩涡?良性发展才是硬道理!
  19. 今天是大四的第一天,感觉自己特别的慌,在秋招的路上我一个人单枪匹马,在这里我将记录我的历程。
  20. 从前后端的角度分析options预检请求——打破前后端联调的理解障碍

热门文章

  1. C#点击关闭按钮 弹出确认框
  2. html像pho传递表单信息,表单剧本
  3. Ubuntu系统下C语言的简单使用及gcc和Makefile编译C程序
  4. 软件开发中团队的重要性
  5. 《如何高效学习》读书笔记
  6. 本地Git的初始设置(账户名+邮箱+color.ui)
  7. like作连词it作形式宾语
  8. java的类型转换关键字_Java基础知识:注释、关键字、标识符、数据类型、常量、变量、数据类型转换...
  9. 如果客户只给我5分钟时间介绍EWM,怎么办?
  10. Fomo3D随机数生成机制攻击