react-native消息推送实现方式

2023-02-18 17:37:21

目录react-native极光推送一、安装插件二、配置安卓配置IOS配置三、使用解决ios角标无法清除总结react-native极光推送先去官网注册:https://www.jiguang.cn并...

目录
react-native极光推送
一、安装插件
二、配置
安卓配置
IOS配置
三、使用
解决ios角标无法清除
总结

react-native极光推送

先去官网注册:https://www.jiguang.cn并创建应用

一、安装插件

jpush-react-native是极光推送官方开发的 React Native 版本插件,用于消息推送。

注意:如果项目里没有jcore-react-najavascripttive,需要安装

npm install jpush-react-native --save
npm install jcore-react-native --save

二、配置

安卓配置

1、修改android/app/build.gradle文件

android {
   defaultConfig {
     applicationId "yourApplicationId"      //在此替换你的应用包名
     ...
     manifestPlaceholders = [
         JPUSH_APPKEY: "yourAppKey",     //在此替换你的APPKey
         JPUSH_CHANNEL: "developer-default"    //在此替换你的channel,也可使用默认的
     ]
   }
 }
dependencies {
   ...
   implementation project(':jpush-react-native') // 添加 jpush 依赖
   implementation project(':jcore-react-native') // 添加 jcore 依赖
 }

2、在android/setting.gradle文件中添加如下代码:

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

3、在android/app/src/main/AndroidManifest.XML文件添加如下代码:

<meta-data
 android:name="JPUSH_CHANNEL"
 android:value="${JPUSH_CHANNEL}" />
<meta-data
 android:name="JPUSH_APPKEY"
 android:value="${JPUSH_APPKEY}" />

IOS配置

1、切换到ios目录下,Pod方式

pod install
//注意:如果项目里使用pod安装过,请先执行命令
pod deintegrate

2、手动方式

Libraries
Add Files to “your project name”
node_modules/jcore-react-native/ios/RCTJCoreModule.xcodeproj
node_modules/jpush-react-native/ios/RCTJPushModule.xcodeproj

Capabilities
Push Notification — ON

Build Settings
All — Search Paths — Header Search Paths — +
$(SRCROOT)/…/node_modules/jcore-react-native/ios/RCTJCoreModule/
$(SRCROOT)/…/node_modules/jpush-react-native/ios/RCTJPushModule/

Build Phases
libz.tbd
libresolv.tbd
UserNotifications.framework
libRCTJCoreModule.a
libRCTJPushModule.a

三、使用

import React from 'react';
import {StyleSheet, Text, View, TouchableHighlight} from 'react-native';
import JPush from 'jpush-react-native';

const styles = StyleSheet.create({
  container: {
    Flex: 1,
    justifyContent: 'center',
    alignItems: 'center',
    backgroundColor: '#F5FCFF',
  },
  setBtnStyle: {
    width: 320,
    justifyContent: 'center',
    alignItems: 'center',
    marginTop: 10,
    borderWidth: 1,
    borderColor: '#3e83d7',
    borderRadius: 8,
    backgroundColor: '#3e83d7',
    padding: 10
  },
  textStyle: {
    textAlign: 'center',
    fontSize: 25,
    color: '#ffffff'
  }
});

class Button extends React.Component {
  render() {
    return <TouchableHighlight
      onPress={this.props.onPress}
      underlayColor='#e4083f'
      activeOpacity={0.5}
    >
      <View
        style={styles.setBtnStyle}>
        <Text
          style={styles.textStyle}>
          {this.props.title}
        </Text>
      </View>
    </TouchableHighlight>
  }
}

export default class App extends React.Component {

  constructor(props) {
    super(props);
  }

  componentDidMount() {
    JPush.init();
    //连接状态
    this.connectListener = result => {
      console.log("connectListener:" + jsON.stringify(result))
    };
    JPush.addConnectEventListener(this.connectListener);
    //通知回调
    this.notificationListener = result => {
      console.log("notificationListener:" + JSON.stringify(result))
    };
    JPush.addNotificationListener(this.notificationListener);
    //本地通知回调
    this.localNotificationListener = result => {
      console.log("localNotificationListener:" + JSON.stringify(result))
    };
    JPush.addLocalNotificationListener(this.localNotificationListener);
    //自定义消息回调
    this.customMessageListener = result => {
      console.log("customMessageListener:" + JSON.stringify(result))
    };
    JPush.addCustomMessagegListener(this.customMessageListener);
    //tag alias事件回调
    this.tagAliasListener = result => {
      console.log("tagAliasListener:" + JSON.stringify(result))
    };
    JPush.addTagAliasListener(this.tagAliasListener);
    //手机号码事件回调
    this.mobileNumberListener = result => {
      console.log("mobileNumberListener:" + JSON.stringify(result))
    };
    JPush.addMobileNumberListener(this.mobileNumberListener);
  }

  render() {
    return (
      <View style={styles.container}>
        <Button title="setLoggerEnable"
            onPress={() => JPush.setLoggerEnable(true)
            }/>

        <Button title="getRegisterID"
            onPress={() => JPush.getRegistrationID(result =>
              console.log("registerID:" + JSON.stringify(result))
            )}/>

        {/*<Button title="addTags"
            onPress={() => JPush.addTags({sequence: 1, tags: ["1", "2", "3"]})}/>
        <Button title="updateTags"
            onPress={() => JPush.updateTags({sequence: 2, tags: ["4", "5", "6"]})}/>
        <Button title="deleteTag"
            onPress={() => JPush.deleteTag({sequence: 3, tags: ["4", "5", "6"]})}/>
        <Button title="deleteTags"
            onPress={() => JPush.deleteTags({sequence: 4})}/>
        <Button title="queryTag"
            onPress={() => JPush.queryTag({sequence: 4, tag: "1"})}/>
        <Button title="queryTags"
            onPress={() => JPush.queryTags({sequence: 5})}/>
        <Button title="setAlias"
            onPress={() => JPush.setAlias({sequence: 6,alias:"xxx"})}/>
        <Button title="deleteAlias"
            onPress={() => JPush.deleteAlias({sequence: 7})}/>
        <Button title="queryAlias"
            onPress={() => JPush.queryAlias({sequence: 8})}/>
        <Button title="setMobileNumber"
            onPress={() => JPush.setMobileNumber({mobileNumber: "13888888888"})}/>
        //仅ios
        <Button title="setBadge"
            onPress={() => JPush.setBadge({"badge":1,"appBadge":1})}/>
        <Button title="initCrashHandler"
            onPress={() => JPush.initCrashHandler()}/>
        <Button title="addLocalNotification"
            onPress={() => JPush.addLocalNotification({
              messageID: "123456789",
              title: "title123",
              content: "content123",
              extras: {"key123": "value123"}
            })}/>
        <Button title="removeLocalNotification"
            onPress={() => JPush.removeLocalNotification({messageID: '123456789'})}/>*/}

      </View>
    );
  }

}

----------------大功告成啦-----------------------------

更多配置信息以及使用可见github:https://github.com/jpush/jpush-react-native

解决ios角标无法清除

1.修改 node_modules/jpush-react-native/ios/RCTJPushModule/RCTJPushModule.m文件

RCT_EXPORT_METHOD(setBadge:(NSDictionary *)params)
{
  if(params[BADGE]){
    NSNumber *number = params[BADGE];
    [UIApplication sharedApplication].applicationIconBadgeNumber = [number integerValue]; // 增加这句
    [JPUSHService setBadge:[number integerValue]];
  }
}

2.使用手动清除

JPush.setBadge({badge: 0})

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。