react native 動態獲取渠道

背景

  1. react-native開發的安卓APP
  2. 打包需要打不同渠道的包
  3. 不同渠道需要上不同的活動,有活動的渠道打包的時候需要調整代碼,很是繁雜

解決方案

  1. 再page裏面獲取渠道名,根據渠道名做判斷

首先獲取渠道

https://www.npmjs.com/package/react-native-get-channel
在google搜索 react native channel 得到了這個組件,經過使用後發現是獲取AndroidManifest.xml一個參數的value

把渠道動態配知道AndroidManifest裏面

在上一步中,我發現並沒有直接獲取渠道(起初我沒有讀懂文檔,以爲可以直接獲取到,這讓我很絕望)
於是我又回到了build.gradle去看渠道是怎麼配置的,我發現渠道都是配置在productFlavors裏面,我就去搜索productFlavors是幹嘛的,然後我就看到了這個帖子https://juejin.im/entry/5a586bfaf265da3e2c3808c5《Gradle中productFlavors使用詳解》
我的運氣真的爆棚,這個帖子講了如何把渠道名配置到AndroidManifest裏面去,剛好和我前面使用的組件結合起來了。
於是趕緊測試,發現成功的串聯起來了。

附上原博部分內容

配置渠道名到AndroidManifest

如果要配置不同的包名,版本號等,可直接在對應的產品定義中指定相應的屬性值;如果要配置渠道號可以通過${name}的形式在AndroidManifest.xml中插入一個佔位符,編譯的時候會替換爲真實值。

flavorDimensions "cooperator"
    productFlavors {
        cooperatorA {
            applicationId "com.ckj.myapplication1"
            manifestPlaceholders = [UMENG_CHANNEL_VALUE:"channel1"]
            versionCode 1
            versionName "1.0"
            dimension "cooperator"
        }
        cooperatorB {
            applicationId "com.ckj.myapplication2"
            manifestPlaceholders = [UMENG_CHANNEL_VALUE:"channel2"]
            versionCode 2
            versionName "1.0.1"
            dimension "cooperator"
        }
    }

在AndroidManifest.xml中添加渠道變量

<application
    ...>
    ...
    <meta-data
        android:name="UMENG_CHANNEL"
        android:value="${UMENG_CHANNEL_VALUE}" />
</application>

在page獲取渠道名

Add channel information into AndroidManifest.xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.ownmoduletest">
    ...
    <application
      ...
      <meta-data android:name="JPUSH_APPKEY" android:value="12.324"/> // <--- ADD HERE
      ...
    </application>
    ...
</manifest>
import {getAppMetaData} from 'react-native-get-channel';
 _getChannel = ()=> {
    getAppMetaData('JPUSH_APPKEY').then((data)=>{
      alert(data);
    }).catch((error)=>{
      alert('獲取失敗');
    });
  }

寫在最後

本人不是專業的Android所以很多地方不明白,不知道這個是不是在RN項目中的最優解決方案,歡迎討論。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章