React Native集成阿里云推送

Stella981
• 阅读 555

集成阿里云推送的方式有两种:一:通过maven库达到快速集成的目的,二:通过手动修改配置配置文件的方法,由于手动修改配置文件过程繁琐且极易出现问题,所以强烈建议使用maven库达到快速集成的目的。下面是详细步骤:

1.在Project根目录下build.gradle文件中配置maven库URL:

maven {
url 'http://maven.aliyun.com/nexus/content/repositories/releases/'
}

React Native集成阿里云推送

2.在android/app/build.gradle文件中添加以下依赖:

android {

...

defaultConfig {

applicationId "com.****_rn"

minSdkVersion rootProject.ext.minSdkVersion

targetSdkVersion rootProject.ext.targetSdkVersion

versionCode 1

versionName "1.0"

//以下是新注入的依赖

ndk {

//选择要添加的对应cpu类型的.so库。

abiFilters "armeabi-v7a","x86"

}

 

}

dependencies {

......

//注入阿里云推送SDK

compile 'com.aliyun.ams:alicloud-android-push:3.1.9.1'

......

}

3.appKey, appSecret配置

在AndroidManifest文件中设置appKey,appSecret,文件路径如图所示:
React Native集成阿里云推送

<meta-data android:name="com.alibaba.app.appkey" android:value="30265081"/> <!-- 请填写你自己的- appKey -->
<meta-data android:name="com.alibaba.app.appsecret" android:value="46d7509e703cfb7b47a804c497ca3e66"/> <!-- 请填写你自己的appSecret -->

4.消息接收Receiver配置

将以下push文件复制入图中所示位置,记得修改包名:
链接: https://pan.baidu.com/s/14n84zDtjzWoBe5-Syr9Aqw 密码: svt7
React Native集成阿里云推送

5.将receiver监听器加入到android/app/src/main/AndroidManifest.xml中

<receiver

android:name=".push.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>

React Native集成阿里云推送

6.配置 Proguard文件

这个文件在android studio中容易找到

-keepclasseswithmembernames class ** {

native <methods>;

}

-keepattributes Signature

-keep class sun.misc.Unsafe { *; }

-keep class com.taobao.** {*;}

-keep class com.alibaba.** {*;}

-keep class com.alipay.** {*;}

-keep class com.ut.** {*;}

-keep class com.ta.** {*;}

-keep class anet.**{*;}

-keep class anetwork.**{*;}

-keep class org.android.spdy.**{*;}

-keep class org.android.agoo.**{*;}

-keep class android.os.**{*;}

-keep class org.json.**{*;}

-dontwarn com.taobao.**

-dontwarn com.alibaba.**

-dontwarn com.alipay.**

-dontwarn anet.**

-dontwarn org.android.spdy.**

-dontwarn org.android.agoo.**

-dontwarn anetwork.**

-dontwarn com.ut.**

-dontwarn com.ta.**

React Native集成阿里云推送

7.在应用中注册和启动移动推送

在android/app/src/main/java/com/ysmz_merchant_rn/MainApplication.java中添加注册推送方法,并在onCreate()方法中调用

 @Override

public void onCreate() {

super.onCreate();

SoLoader.init(this, /* native exopackage */ false);

initializeFlipper(this); // Remove this line if you don't want Flipper enabled

//调用推送方法

initCloudChannel(this);

}


...

 

/**

* 初始化云推送通道

* @param applicationContext

*/

private void initCloudChannel(Context applicationContext) {

this.createNotificationChannel();

PushServiceFactory.init(applicationContext);

CloudPushService pushService = PushServiceFactory.getCloudPushService();

pushService.register(applicationContext, new CommonCallback() {

@Override

public void onSuccess(String response) {

Log.d(TAG, "init cloudchannel success");

}

@Override

public void onFailed(String errorCode, String errorMessage) {

Log.d(TAG, "init cloudchannel failed -- errorcode:" + errorCode + " -- errorMessage:" + errorMessage);

}

 

 

});

 

// MiPushRegister.register(applicationContext, "XIAOMI_ID", "XIAOMI_KEY"); // 初始化小米辅助推送

// HuaWeiRegister.register(this); // 接入华为辅助推送

// VivoRegister.register(applicationContext);

// OppoRegister.register(applicationContext, "OPPO_KEY", "OPPO_SECRET");

// MeizuRegister.register(applicationContext, "MEIZU_ID", "MEIZU_KEY");

}


private void createNotificationChannel() {

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {

NotificationManager mNotificationManager = (NotificationManager) 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);

 

// context.startForegroundService(new Intent(context, ServedService.class));

}

// }else {

// context.startService(new Intent(context, ServedService.class));

// }

}

至此,移动推送配置已经完成,接着需要在android studio中build一下文件,系统会自动导入移动推送所需的依赖包,没有错误后在阿里云移动推送控制台中推送通知测试。下面两个链接是阿里云官网开发文档,可以自行参考。
Android SDK 3.0配置:https://help.aliyun.com/document\_detail/51056.html?spm=a2c4g.11186623.2.29.10895241WeUcI0

Android SDK 常见错误:https://help.aliyun.com/knowledge\_list/39996.html?spm=a2c4g.11186623.6.611.5b7552e749NL7p

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Peter20 Peter20
3年前
mysql中like用法
like的通配符有两种%(百分号):代表零个、一个或者多个字符。\(下划线):代表一个数字或者字符。1\.name以"李"开头wherenamelike'李%'2\.name中包含"云",“云”可以在任何位置wherenamelike'%云%'3\.第二个和第三个字符是0的值wheresalarylike'\00%'4\
Stella981 Stella981
2年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Stella981 Stella981
2年前
Android So动态加载 优雅实现与原理分析
背景:漫品Android客户端集成适配转换功能(基于目标识别(So库35M)和人脸识别库(5M)),导致apk体积50M左右,为优化客户端体验,决定实现So文件动态加载.!(https://oscimg.oschina.net/oscnet/00d1ff90e4b34869664fef59e3ec3fdd20b.png)点击上方“蓝字”关注我
Wesley13 Wesley13
2年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Stella981 Stella981
2年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
3个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这