概述 jpush-react-native 是极光推送官方开发的 React Native 版本插件,可以快速集成推送功能。现在最新版本的 JPush SDK 分离了 JPush 及 JCore,让开发者可以分开集成 JMessage 及 JPush(以前 JMessage 包含了 JPush)。
我没有 mac 设备,所以只说 Android 的配置。
安装 打开终端,进入项目文件夹,执行以下命令:
1 2 3 $ npm install jpush-react-native --save $ npm install jcore-react-native --save
配置 1. 自动配置部分 官方:
作者推荐:
1 2 3 $ react-native link jpush-react-native $ react-native link jcore-react-native
执行完 link 项目后可能会出现报错,这没关系,需要手动配置一下 build.gradle 文件。
2. 手动配置部分 在 Android Studio 中打开你的项目,然后找到 app 或者你自己定义的需要集成 jpush-react-native 的模块,打开此模块下的 build.gradle 文件,做以下改动:
project/android/app/build.gradle
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 android { ... defaultConfig { applicationId "yourApplicationId" ... manifestPlaceholders = [ JPUSH_APPKEY: "yourAppKey" , APP_CHANNEL: "developer-default" ] } } ... dependencies { compile fileTree(dir: "libs" , include: ["*.jar" ]) compile project(':jpush-react-native' ) compile project(':jcore-react-native' ) compile "com.facebook.react:react-native:+" }
检查 android 项目下的 settings.gradle 配置有没有包含以下内容:
project/android/settings.gradle
1 2 3 include ':app' , ':jpush-react-native' , ':jcore-react-native' project(':jpush-react-native' ).projectDir = new File(rootProject.projectDir, '../node_modules/jpush-react-native/android' ) 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 2 3 4 5 6 7 <application ... <!-- Required . Enable it you can get statistics data with channel --> <meta-data android:name ="JPUSH_CHANNEL" android:value ="${APP_CHANNEL}" /> <meta-data android:name ="JPUSH_APPKEY" android:value ="${JPUSH_APPKEY}" /> </application >
现在重新 sync 一下项目,应该能看到 jpush-react-native 以及 jcore-react-native 作为 android Library 项目导进来了。
接下来加入 JPushPackage
打开 app 下的 MainActivity,在 ReactInstanceManager 的 build 方法中加入 JPushPackage:
project/android/app/MainActivity.java
打开 app 下的 MainApplication.java 文件,然后加入 JPushPackage,参考 demo :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 private boolean SHUTDOWN_TOAST = false ;private boolean SHUTDOWN_LOG = false ;private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this ) { @Override protected boolean getUseDeveloperSupport () { return BuildConfig.DEBUG; } @Override protected List<ReactPackage> getPackages () { return Arrays.<ReactPackage>asList( new MainReactPackage(), new JPushPackage(SHUTDOWN_TOAST, SHUTDOWN_LOG) ); } };
然后在 MainActivity 中加入一些初始化代码即可:
project/android/app/src/java/…/MainActivity.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 public class MainActivity extends ReactActivity { ... @Override protected void onCreate (Bundle savedInstanceState) { super .onCreate(savedInstanceState); JPushInterface.init(this ); } @Override protected void onPause () { super .onPause(); JPushInterface.onPause(this ); } @Override protected void onResume () { super .onResume(); JPushInterface.onResume(this ); } @Override protected void onDestroy () { super .onDestroy(); } }
这样就完成了所有的配置。接下来就可以在 JS 中调用插件提供的 API 了。
使用 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 import JPushModule from 'jpush-react-native' ;... componentDidMount() { 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); }); } componentWillUnmount() { JPushModule.removeReceiveCustomMsgListener(); JPushModule.removeReceiveNotificationListener(); }
更多高级应用查看官方说明