Nuclear Pumpkin Mayhem

    react-native-pushing

    1.0.10 • Public • Published

    react-native-pushing

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

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

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

    安装:

    yarn add react-native-pushing
    

    使用:

    1、android/settings.gradle

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

    2、android/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-pushing")
    }
    

    3、android/build.gradle

     allprojects {
         repositories {
             mavenLocal()
             jcenter()
             ...
             //个推
             maven {
                 url "http://mvn.gt.igexin.com/nexus/content/repositories/releases/"
             }
             //华为推送
             maven {url 'http://developer.huawei.com/repo/'}
         }
     }
    

    4、android/app/src/main/AndroidManifest.xml

    manifest 根节点添加属性 xmlns:tools="http://schemas.android.com/tools"

    跟节点下添加:

        <!--小米推送-->
         <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" tools:replace="android:authorities"
            android:authorities="${PACKAGE_NAME}.hms.update.provider"
            android:exported="false"
            android:grantUriPermissions="true" >
        </provider>
    

    5、注册推送

    MainApplication中引用组件:

    import com.duanglink.rnmixpush.MixPushReactPackage;
    
        @Override
        protected List<ReactPackage> getPackages() {
           ...
           packages.add(new MixPushReactPackage())
          return packages;
        }
    

    MainActivity中注册推送:

    import com.duanglink.huaweipush.HuaweiPushActivity;
    
    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('消息通知',notification);
            }
    );
    

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

    import MixPush from 'react-native-pushing';
    
    • MixPush.setAlias(alias); //设置别名
    • MixPush.unsetAlias(alias); //取消设置别名
    • MixPush.setTags(tags); //设置用户标签
    • MixPush.unsetTags(tags); //取消设置用户标签
    • MixPush.getClientId(); //获取客户端ID 

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

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

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

    实例:
    

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

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

    8、客户端推送示例

    小米推送


    华为推送


    魅族推送


    个推推送


    特别说明

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

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

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

    QQ交流群:516032289

    附录

    Install

    npm i react-native-pushing

    DownloadsWeekly Downloads

    3

    Version

    1.0.10

    License

    ISC

    Unpacked Size

    545 kB

    Total Files

    21

    Last publish

    Collaborators

    • mailtokun