React-Native 消息推送--Android混合推送

背景

由于使用任何一種Android推送都很難在APP進程被殺死后收到推送,只有集成各廠商提供的系統(tǒng)級別推送才能完成此任務,故考慮小米、華為、魅族手機使用官方推送,其他手機使用個推推送!

項目GitHub地址:
https://github.com/wangheng3751/react-native-mixpush

安裝:

npm install --save react-native-mixpush-android

配置使用:

1、配置android/settings.gradle

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

2、配置app/build.gradle

    manifestPlaceholders = [
            PACKAGE_NAME : "你的包名",
            //測試環(huán)境
            GETUI_APP_ID : "個推APPID",
            GETUI_APP_KEY : "個推APPKEY",
            GETUI_APP_SECRET : "個推APPSECRE"
    ]
    dependencies {
        ...
        compile project(":react-native-mixpush-android")
    }

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、配置AndroidManifest.xml

manifest節(jié)點下添加:

        <!--小米推送-->
         <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節(jié)點下添加:

        <!--華為推送配置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;
    
  //特別注意:此處繼承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('消息通知',JSON.stringify(notification));
            }
);

7、React-Native客戶端方法說明:

import MixPush from 'react-native-mixpush-android';
  • MixPush.setAlias(alias); //設置別名
  • MixPush.unsetAlias(alias); //取消設置別名
  • MixPush.setTags(tags); //設置用戶標簽
  • MixPush.unsetTags(tags); //取消設置用戶標簽
  • MixPush.getClientId(); //獲取客戶端ID

以上方法均不支持華為手機

說明:getClientId獲取到的ID為用戶在推送平臺的唯一標識(小米:regId,魅族:pushId;個推:clientId),用于定向推送;

此外,所有推送平臺在APP推送注冊成功后會往客戶端發(fā)送一次注冊成功事件(包含華為:deviceToken),事件名為:"receiveClientId",并攜帶clientId,可使用該事件與getClientId方法配合使用達到獲取clientId的目的。

實例:

  //主動獲取<br>
  MixPush.getClientId((cid)=>{
     alert("cid:"+cid);//自行處理cid代碼
  });
  
  //監(jiān)聽事件<br>
  NativeAppEventEmitter.addListener(
      'receiveClientId',
      (cid) => {
           alert("cid:"+cid);//自行處理cid代碼
      }
  );

說明

后臺推送使用各平臺后臺管理系統(tǒng)或自行集成SDK。

項目QQ交流群:516032289

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。