react-native-mixpush2

1.0.3 • Public • Published

react-native-mixpush2

集成小米推送、华为推送、魅族推送及个推推送的React-Native版本!

由于使用任何一种Android推送都很难在APP进程被杀死后收到推送,只有集成各厂商提供的系统级别推送才能完成此任务,故考虑小米、华为、魅族手机使用官方推送,其他手机使用个推推送!

注:本项目仅适用于android平台(ios统一的apns推送机制较为稳定,只需自行选择一种推送集成即可)。

安装:

yarn add react-native-mixpush2

使用:

1、android/settings.gradle

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

2、app/build.gradle

android {
    defaultConfig {
        manifestPlaceholders = [
                PACKAGE_NAME : "你的包名",
                //测试环境
                GETUI_APP_ID : "个推APPID",
                GETUI_APP_KEY : "个推APPKEY",
                GETUI_APP_SECRET : "个推APPSECRE"
        ]
    }
}
dependencies {
    ...
    compile project(":react-native-mixpush2")
}

3、android/build.gradle

 buildscript {
     ext {
         minSdkVersion = 21 	//最低操作系统版本
     }
 }
 allprojects {
     repositories {
         mavenLocal()
         jcenter()
         ...
         //个推
         maven {
             url "http://mvn.gt.igexin.com/nexus/content/repositories/releases/"
         }
         //华为推送
         maven {url 'http://developer.huawei.com/repo/'}
     }
 }

4、AndroidManifest.xml

manifest节点下添加:

    <!--小米推送-->
     <permission android:name="${PACKAGE_NAME}.permission.MIPUSH_RECEIVE" android:protectionLevel="signature" />
     <uses-permission android:name="${PACKAGE_NAME}.permission.MIPUSH_RECEIVE" />
     <!--小米推送END-->

     <!--魅族推送-->
     <!-- 兼容flyme5.0以下版本,魅族内部集成pushSDK必填,不然无法收到消息-->
     <uses-permission android:name="com.meizu.flyme.push.permission.RECEIVE"></uses-permission>
     <permission android:name="${PACKAGE_NAME}.push.permission.MESSAGE" android:protectionLevel="signature"/>
     <uses-permission android:name="${PACKAGE_NAME}.push.permission.MESSAGE"></uses-permission>
     <!--  兼容flyme3.0配置权限-->
     <uses-permission android:name="com.meizu.c2dm.permission.RECEIVE" />
     <permission android:name="${PACKAGE_NAME}.permission.C2D_MESSAGE"
         android:protectionLevel="signature"></permission>
     <uses-permission android:name="${PACKAGE_NAME}.permission.C2D_MESSAGE"/>
     <!--魅族推送END-->

application节点下添加:

    <!--华为推送配置begin-->
    <meta-data   android:name="com.huawei.hms.client.appid"  android:value="你的APPID"/>
    <provider android:name="com.huawei.hms.update.provider.UpdateProvider"
        android:authorities="${PACKAGE_NAME}.hms.update.provider"
        android:exported="false"
        android:grantUriPermissions="true" >
    </provider>

5、注册推送

MainApplication中引用组件:

import com.duanglink.rnmixpush.MixPushReactPackage;

protected List<ReactPackage> getPackages() {
      return Arrays.<ReactPackage>asList(
          new MainReactPackage(),
          ...
          new MixPushReactPackage()
      );
    }
  };

MainActivity中注册推送:

import com.duanglink.huaweipush.HuaweiPushActivity;
import android.os.Bundle;
public class MainActivity extends HuaweiPushActivity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        if(savedInstanceState==null){
            savedInstanceState=new Bundle();
        }
        savedInstanceState.putString("meizuAppId","魅族AppId");
        savedInstanceState.putString("meizuAppKey","魅族AppKey");
        savedInstanceState.putString("xiaomiAppId","小米AppId");
        savedInstanceState.putString("xiaomiAppKey","小米AppKey");
        super.onCreate(savedInstanceState);
    }
    ...
}

6、React-Native客户端接收事件:

var { NativeAppEventEmitter } = require('react-native');
NativeAppEventEmitter.addListener(
        'receiveRemoteNotification',
        (notification) => {
                Alert.alert('消息通知',JSON.stringify(notification));
        }
);

7、React-Native客户端方法说明:

import MixPush from 'react-native-mixpush2';

MixPush.setAlias(alias); //设置别名<br>
MixPush.unsetAlias(alias); //取消设置别名<br>
MixPush.setTags(tags); //设置用户标签<br>
MixPush.unsetTags(tags); //取消设置用户标签<br>
MixPush.getClientId(); //获取客户端ID<br>    

以上方法均不支持华为手机
   

   说明:getClientId获取到的ID为用户在推送平台的唯一标识(小米:regId,魅族:pushId;个推:clientId),用于定向推送;
   

此外,所有推送平台在APP推送注册成功后会往客户端发送一次注册成功事件(包含华为:deviceToken),事件名为:"receiveClientId",并携带clientId,可使用该事件与getClientId方法配合使用达到获取clientId的目的。

实例:

   //主动获取
   MixPush.getClientId((cid)=>{       alert("cid:"+cid);//自行处理cid代码 });

   //监听事件
   NativeAppEventEmitter.addListener( 'receiveClientId', (cid) => { alert("receiveClientId:"+cid);//自行处理cid代码 } );

特别说明

本项目参考了另外一个大神的开源项目 joyrun/MixPush !

 由于本人非原生开发者,不妥之处请指正,邮箱:wangheng3751@qq.com !

 目前项目处于持续完善更新中...

Readme

Keywords

none

Package Sidebar

Install

npm i react-native-mixpush2

Weekly Downloads

1

Version

1.0.3

License

ISC

Unpacked Size

2 MB

Total Files

28

Last publish

Collaborators

  • mailtokun