react-native-app-upgrade使用

react-native-app-upgrade 是一個(gè)reactnative版本升級的方案履磨,弄得時(shí)候遇到了很多的問題啥供,因?yàn)閍ndroid不會遇到了很多問題,最后終于是打包出來了展氓,現(xiàn)在記錄一下
GitHub地址

方案的作者是使用原生的方法來實(shí)現(xiàn)的兔综,具體的配置大概如下(我的項(xiàng)目名為App):

android 配置

1.將【 android_upgrade 】包拷貝到你的Android項(xiàng)目包名目錄下(app/src/main/com.xxx)


image.png

2.在 app / src / main / res /目錄下創(chuàng)建xml資源文件夾,并創(chuàng)建名稱為【 update_file_provider 】名稱的xml文件只泼,在文件中添加如下代碼:

 <paths>
        <external-cache-path
            name="update_external_cache"
            path="." />

        <cache-path
            name="update_cache"
            path="." />
    </paths>
image.png

注:如果引用了react-native-image-crop-picker組件,就需要合并了一下react-native-image-crop-picker組件的xml剖笙,合并后的文件如下:

<paths>
    <!--升級-->
    <external-cache-path
            name="update_external_cache"
            path="." />

    <cache-path
            name="update_cache"
            path="." />
 <!--image-crop-picker中的不重復(fù)的-->
    <external-path name="external_files" path="."/>
</paths>

3.在AndroidMainfest.xml文件下添加權(quán)限和服務(wù)配置

    <uses-permission android:name="android.permission.INTERNET" />
    <!--8.0安裝需要的權(quán)限-->
    <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>   
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
 <application
      android:name=".MainApplication"
      android:allowBackup="true"
      android:label="@string/app_name"
      android:icon="@mipmap/ic_launcher"
      android:theme="@style/AppTheme">
      
        // 添加fileProvider配置代碼
        <provider
            android:name="android.support.v4.content.FileProvider"
            android:authorities="${applicationId}.updateFileProvider"
            android:exported="false"
            android:grantUriPermissions="true">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/update_file_provider" />
        </provider>
     
        // 添加Service代碼
        <service
            android:name=".android_upgrade.DownloadService"
            android:exported="true" />
            
            // 省略其他代碼... 
    </application>

如果使用了react-native-image-crop-picker組件就需要按以下配置

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.app">

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.CAMERA"/>
    <!--8.0安裝需要的權(quán)限-->
    <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
    <application
      android:name=".MainApplication"
      android:label="@string/app_name"
      android:icon="@mipmap/ic_launcher"
      android:allowBackup="true"
      android:theme="@style/AppTheme">

    <!--// 添加fileProvider配置代碼-->
    <provider
        android:name="android.support.v4.content.FileProvider"
        android:authorities="${applicationId}.updateFileProvider"
        android:exported="false"
        android:grantUriPermissions="true">
        <meta-data
        android:name="android.support.FILE_PROVIDER_PATHS"
        android:resource="@xml/update_file_provider" />
    </provider>

    <!--// 添加Service代碼-->
    <service
        android:name=".android_upgrade.DownloadService"
        android:exported="true" />

    <activity
    android:name=".MainActivity"
    android:label="@string/app_name"
    android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
    android:windowSoftInputMode="adjustResize">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
        <action android:name="android.intent.action.DOWNLOAD_COMPLETE"/>
    </intent-filter>
    </activity>
      <activity android:name="com.facebook.react.devsupport.DevSettingsActivity" />
    </application>

</manifest>

4.打開android/app/build.gradle文件,修改 compileSdkVersion 26 buildToolsVersion "26.0.3"请唱,版本指定為26以上即可弥咪。

5.在你的工程目錄中,打開android/app/src/main/res/values/strings.xml文件十绑,添加如下代碼:
<string name="android_auto_update_download_progress">正在下載:%1$d%%</string>

6.在MainApplication.java文件下的getPackages方法中添加如下代碼:[首先要將UpgradePackage導(dǎo)入]

import 項(xiàng)目工程包名.UpgradePackage;
    new UpgradePackage()
image.png

7.android_upgrade包下的DownloadService.java 需要將作者的改成自己的包名

image.png

UpgradePackage.java如果報(bào)錯(cuò)就是把@Override刪了
image.png

8.如果裝了組件react-native-image-crop-picker還需要去組件/node_modules/react-native-image-crop-picker/文件夾中修改文件
修改/node_modules/react-native-image-crop-picker/android/src/main/java/com.reactnative/ivpusic/imagepicker/PickerModule.java文件

1)添加如下代碼:
    private String fileProviderAuthorities = "provider";

(2)添加如下方法:
    @ReactMethod
    public void setFileProviderAuthorities(String fileProviderAuthorities) {
      this.fileProviderAuthorities = fileProviderAuthorities;
    }

(3) 修改303行代碼聚至,替換成如下方法:
    mCameraCaptureURI = FileProvider.getUriForFile(activity,
      activity.getApplicationContext().getPackageName() + "." + this.fileProviderAuthorities,
      imageFile);
 
修改303行代碼截圖

注釋node_modules/react-native-image-crop-picker/android/src/main/AndroidManifest.xml文件

image.png

之后在使用ImagePicker前,先調(diào)用setFileProviderAuthorities方法即可本橙。Android是自己寫的判斷是否安卓

這里有個(gè)要提一下setFileProviderAuthorities方法應(yīng)該在react_native_image_crop_picker/index.d.ts進(jìn)行添加

react_native_image_crop_picker/index.d.ts

  //頁面中調(diào)用
    if(Android) {
      ImagePicker.setFileProviderAuthorities('updateFileProvider');
    }
    ImagePicker.openPicker({...})

IOS配置

將ios_upgrade里面的文件拷貝到項(xiàng)目目錄下


頁面中調(diào)用

使用

1.Android

if(Android) {
                        this.setState({                
                            apkUrl:'http://XXXXX'
                        })
                        Alert.alert('發(fā)現(xiàn)新版本','是否下載',
                        [
                            {text:"確定", onPress:() => {
                                //apkUrl為app下載連接地址
                                NativeModules.upgrade.upgrade(this.state.apkUrl);  
                            }},
                            // {text:"取消", onPress:this.opntion2Selected}            
                            {text:"取消"}    
                        ]
                        ); 
                    }   
 DeviceEventEmitter.addListener('LOAD_PROGRESS',(msg)=>{        
            // let title = "當(dāng)前下載進(jìn)度:" + msg
            // if(Android)ToastAndroid.show(title, ToastAndroid.SHORT);
        });

2.IOS

//AppId為上架后的應(yīng)用的AppId可以到開發(fā)者中心中查看
 if(iOS) {
            NativeModules.upgrade.upgrade('AppId',(msg) =>{  
                if('YES' == msg) {                     
                   Alert.alert('發(fā)現(xiàn)新版本','是否下載',
                   [
                       {text:"確定", onPress:() => {
                           //跳轉(zhuǎn)到APP Stroe
                            NativeModules.upgrade.openAPPStore('AppId');  
                       }},      
                       {text:"取消"}    
                   ]
                   );                   
                } else {  
                //    this.toast('當(dāng)前為最新版本');  
                }  
            })             
        }

注:
react-native使用RNFetchBlob 更新安卓包 http://www.reibang.com/p/0a5af0d60aba

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末晚岭,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子勋功,更是在濱河造成了極大的恐慌坦报,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,546評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件狂鞋,死亡現(xiàn)場離奇詭異片择,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)骚揍,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評論 3 395
  • 文/潘曉璐 我一進(jìn)店門字管,熙熙樓的掌柜王于貴愁眉苦臉地迎上來啰挪,“玉大人,你說我怎么就攤上這事嘲叔⊥龊牵” “怎么了?”我有些...
    開封第一講書人閱讀 164,911評論 0 354
  • 文/不壞的土叔 我叫張陵硫戈,是天一觀的道長锰什。 經(jīng)常有香客問我,道長丁逝,這世上最難降的妖魔是什么汁胆? 我笑而不...
    開封第一講書人閱讀 58,737評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮霜幼,結(jié)果婚禮上嫩码,老公的妹妹穿的比我還像新娘。我一直安慰自己罪既,他們只是感情好铸题,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,753評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著琢感,像睡著了一般回挽。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上猩谊,一...
    開封第一講書人閱讀 51,598評論 1 305
  • 那天千劈,我揣著相機(jī)與錄音,去河邊找鬼牌捷。 笑死墙牌,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的暗甥。 我是一名探鬼主播喜滨,決...
    沈念sama閱讀 40,338評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼撤防!你這毒婦竟也來了虽风?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,249評論 0 276
  • 序言:老撾萬榮一對情侶失蹤寄月,失蹤者是張志新(化名)和其女友劉穎辜膝,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體漾肮,經(jīng)...
    沈念sama閱讀 45,696評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡厂抖,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,888評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了克懊。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片忱辅。...
    茶點(diǎn)故事閱讀 40,013評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡七蜘,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出墙懂,到底是詐尸還是另有隱情橡卤,我是刑警寧澤,帶...
    沈念sama閱讀 35,731評論 5 346
  • 正文 年R本政府宣布损搬,位于F島的核電站碧库,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏场躯。R本人自食惡果不足惜谈为,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,348評論 3 330
  • 文/蒙蒙 一旅挤、第九天 我趴在偏房一處隱蔽的房頂上張望踢关。 院中可真熱鬧,春花似錦粘茄、人聲如沸签舞。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽儒搭。三九已至,卻和暖如春芙贫,著一層夾襖步出監(jiān)牢的瞬間搂鲫,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評論 1 270
  • 我被黑心中介騙來泰國打工磺平, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留魂仍,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,203評論 3 370
  • 正文 我出身青樓拣挪,卻偏偏與公主長得像擦酌,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子菠劝,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,960評論 2 355

推薦閱讀更多精彩內(nèi)容