原文链接:https://blog.csdn.net/qq_38719039/article/details/80684144

1 npm install jpush-react-native --save

2 npm install jcore-react-native --save

自动关联配置部分

$ react-native link

2. 手动配置部分

在 Android Studio 中打开你的项目,然后找到 app 或者你自己定义的需要集成 jpush-react-native 的模块,打开此模块下的 build.gradle 文件,做以下改动:

project/android/app/build.gradle

  1.  
    android {
  2.  
    ...
  3.  
    defaultConfig {
  4.  
    applicationId "yourApplicationId" // 此处改成你在极光官网上申请应用时填写的包名
  5.  
    ...
  6.  
    manifestPlaceholders = [
  7.  
    JPUSH_APPKEY: "yourAppKey", //在此替换你极光官网上申请的 APPKey
  8.  
    APP_CHANNEL: "developer-default" //应用渠道号, 默认即可
  9.  
    ]
  10.  
    }
  11.  
    }
  12.  
    ...
  13.  
    dependencies {
  14.  
    compile fileTree(dir: "libs", include: ["*.jar"])
  15.  
    compile project(':jpush-react-native') // 添加 jpush 依赖
  16.  
    compile project(':jcore-react-native') // 添加 jcore 依赖
  17.  
    compile "com.facebook.react:react-native:+" // From node_modules
  18.  
    }

检查 android 项目下的 settings.gradle 配置有没有包含以下内容:

project/android/settings.gradle

  1.  
    include ':app', ':jpush-react-native', ':jcore-react-native'
  2.  
    project(':jpush-react-native').projectDir = new File(rootProject.projectDir, '../node_modules/jpush-react-native/android')
  3.  
    project(':jcore-react-native').projectDir = new File(rootProject.projectDir, '../node_modules/jcore-react-native/android')

检查一下 app 下的 AndroidManifest 配置,有没有增加 <meta-data> 部分。

project/android/app/AndroidManifest.xml

  1.  
    <application
  2.  
    ...
  3.  
    <!-- Required . Enable it you can get statistics data with channel -->
  4.  
    <meta-data android:name="JPUSH_CHANNEL" android:value="${APP_CHANNEL}"/>
  5.  
    <meta-data android:name="JPUSH_APPKEY" android:value="${JPUSH_APPKEY}"/>
  6.  
     
  7.  
    </application>

现在重新 sync 一下项目,应该能看到 jpush-react-native 以及 jcore-react-native 作为 android Library 项目导进来了。

 

接下来加入 JPushPackage

  • RN 0.29.0 以下版本

打开 app 下的 MainActivity,在 ReactInstanceManager 的 build 方法中加入 JPushPackage:

project/android/app/MainActivity.java

 
  • RN 0.29.0 以上版本

打开 android-->app-->src 下的 MainApplication.java 文件,然后加入 JPushPackage,参考 demo

  1.  
    // 设置为 true 将不弹出 toast
  2.  
    private boolean SHUTDOWN_TOAST = false;
  3.  
    // 设置为 true 将不打印 log
  4.  
    private boolean SHUTDOWN_LOG = false;
  5.  
     
  6.  
    private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) {
  7.  
     
  8.  
    @Override
  9.  
    protected boolean getUseDeveloperSupport() {
  10.  
    return BuildConfig.DEBUG;
  11.  
    }
  12.  
     
  13.  
    @Override
  14.  
    protected List<ReactPackage> getPackages() {
  15.  
    return Arrays.<ReactPackage>asList(
  16.  
    new MainReactPackage(),
  17.  
    new JPushPackage(SHUTDOWN_TOAST, SHUTDOWN_LOG)
  18.  
    );
  19.  
    }
  20.  
    };
  21.  
     

然后在 MainActivity 中加入一些初始化代码即可:

project/android/app/src/java/.../MainActivity.java

  1.  
    import android.os.Bundle;
  2.  
    import com.facebook.react.ReactActivity;
  3.  
    import cn.jpush.android.api.JPushInterface;
  4.  
     
  5.  
    public class MainActivity extends ReactActivity {
  6.  
    ...
  7.  
     
  8.  
    @Override
  9.  
    protected void onCreate(Bundle savedInstanceState) {
  10.  
    super.onCreate(savedInstanceState);
  11.  
    JPushInterface.init(this);
  12.  
    }
  13.  
     
  14.  
    @Override
  15.  
    protected void onPause() {
  16.  
    super.onPause();
  17.  
    JPushInterface.onPause(this);
  18.  
    }
  19.  
     
  20.  
    @Override
  21.  
    protected void onResume() {
  22.  
    super.onResume();
  23.  
    JPushInterface.onResume(this);
  24.  
    }
  25.  
     
  26.  
    @Override
  27.  
    protected void onDestroy() {
  28.  
    super.onDestroy();
  29.  
    }
  30.  
    }

这样就完成了所有的配置。接下来就可以在  JS 中调用插件提供的 API 了。

import JPushModule from 'jpush-react-native';

...

componentDidMount() {
// 新版本必需写回调函数
// JPushModule.notifyJSDidLoad();
JPushModule.notifyJSDidLoad((resultCode) => {
if (resultCode === 0) {}
});

// 接收自定义消息
JPushModule.addReceiveCustomMsgListener((message) => {
this.setState({pushMsg: message});
});
// 接收推送通知
JPushModule.addReceiveNotificationListener((message) => {
console.log("receive notification: " + message);
});
// 打开通知
JPushModule.addReceiveOpenNotificationListener((map) => {
console.log("Opening notification!");
console.log("map.extra: " + map.extras);
// 可执行跳转操作,也可跳转原生页面
// this.props.navigation.navigate("SecondActivity");
});
}

componentWillUnmount() {
JPushModule.removeReceiveCustomMsgListener();
JPushModule.removeReceiveNotificationListener();
}

react native jpush的更多相关文章

  1. react native jpush跳转页面不成功解决方法

    在点击事件时加入如下红色代码即可 import JPushModule from 'jpush-react-native'; ... componentDidMount() { // 新版本必需写回调 ...

  2. react native 常用组件汇总

    react-native-uploader //文件上传https://github.com/aroth/react-native-uploader jpush-react-native //官方版本 ...

  3. React Native实现一个自定义模块

    概述 在 前期介绍React Native 项目结构的时候,我们讲解过React的项目组成,其中说过 node_modules 文件夹,这是一个存放 node 模块的地方.我们知道React是用npm ...

  4. React Native 之极光推送jpush-react-native 手把手配置

    这是 react native 配置极光推送使用的组件,比较常用https://github.com/jpush/jpush-react-native 先把组件地址贴出来,方便大家使用参考.如果这个大 ...

  5. 《React Native 精解与实战》书籍连载「React Native 源码学习方法及其他资源」

    此系列文章将整合我的 React 视频教程与 React Native 书籍中的精华部分,给大家介绍 React Native 源码学习方法及其他资源. 最后的章节给大家介绍 React Native ...

  6. React Native之通知栏消息提示(ios)

    React Native之通知栏消息提示(ios) 一,需求分析与概述 详情请查看:React Native之通知栏消息提示(android) 二,极光推送注册与集成 2.1,注册 详情请查看:Rea ...

  7. React Native之通知栏消息提示(android)

    React Native之通知栏消息提示(android) 一,需求分析与概述 1.1,推送作为手机应用的基本功能,是手机应用的重要部分,如果自己实现一套推送系统费时费力,所以大部分的应用都会选择使用 ...

  8. 你不可不知的 React Native 混合用法(Android 篇)

    前言 当前 React Native 虽说版本更新比较快,各种组件也提供的很全面了,但是在某些情况下,混合开发的方式才会快速缩短开发周期,原因无非就是原生平台的"底蕴"无疑更深,拥 ...

  9. 在 React Native 中使用 Redux 架构

    前言 Redux 架构是 Flux 架构的一个变形,相对于 Flux,Redux 的复杂性相对较低,而且最为巧妙的是 React 应用可以看成由一个根组件连接着许多大大小小的组件的应用,Redux 也 ...

随机推荐

  1. oracle 添加字段

    alter table 表名 add 新增字段名(类型+长度); #添加字段 alter table asset_orders add remark varchar2(255); #查看 descri ...

  2. 【视频开发】【CUDA开发】英伟达CUVID硬解,并通过FFmpeg读取文件

    虽然FFmpeg本身有cuvid硬解,但是找不到什么好的资料,英伟达的SDK比较容易懂,参考FFmpeg源码,将NVIDIA VIDEO CODEC SDK的数据获取改为FFmpeg获取,弥补原生SD ...

  3. hashmap源码解析,JDK1.8和1.7的区别

    背景:hashmap面试基础必考内容,需要深入了解,并学习其中的相关原理.此处还要明白1.7和1.8不通版本的优化点. Java 8系列之重新认识HashMap Java 8系列之重新认识HashMa ...

  4. QT 模拟Visio软件通过拖动搭建流程图

    探索中.. 1 https://bbs.csdn.net/topics/390848708 https://www.cnblogs.com/chinese-zmm/archive/2010/10/10 ...

  5. 【LeetCode】两数之和【优化查询过程即可】

    给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能重复利用这个数组中同样的元 ...

  6. Office系列常用快捷键

    office三件套,常用的快捷键. Word常用快捷键 查找文字.格式和特殊项 Ctrl+G 使字符变为粗体 Ctrl+B 为字符添加下划线 Ctrl+U 删除段落格式 Ctrl+Q 复制所选文本或对 ...

  7. 文件和异常——python从编程入门到实践

    从文件中读取数据 1. 读取整个文件 要读取文件,首先来创建一个文件: 然后打开并读取这个文件,再将其内容显示到屏幕上: file_reader.py with open('pi_digits.txt ...

  8. Wing-AEP平台LWM2M设备接入

    实现Wing-AEP中国电信物联网开放平台,LWM2M设备接入 一.准备 接入模组:BC35-G 平台地址:https://www.ctwing.cn/ 点击右上角控制台 点击左侧栏点击产品中心 二. ...

  9. 【scratch3.0教程】1.2 下载安装scratch

    第2课  下载安装Scratch 1 . 什么是Scratch?                                Scratch将程序语言设计成一块块积木,你只要用拖拉的方式,将程序积木 ...

  10. shell 学习笔记9-while/until循环语句

    一.while循环语句 1.循环语句 循环愈久就是重复执行一条指令或一组执行,知道条件不在满足时停止,shell循环语句包括,while.until.for.select语句 2.while循环 主要 ...