問題描述:
在APP開發(fā)中厢绝,檢測版本更新功能是應(yīng)該說是必不可少的炸庞。那么既然有這樣的需求最欠,就要有對應(yīng)的方法來解決。在RN混合開發(fā)中积担,可以使用react-native-app-upgrade組件來進行陨晶,接下來就以這個react-native-app-upgrade來操作檢測版本更新功能。
步驟1:
從github上下載react-native-app-upgrade組件帝璧,將解壓后得到的android_upgrade文件夾放到你需要添加版本更新功能的項目目錄下(android\app\src\main\java\com\包名)下先誉,如圖1-1所示。
接著再把解壓得到的ios_upgrade文件夾放到需要添加版本更新功能的項目目錄(\ios)下聋溜,如圖1-2所示谆膳。
接著修改android_upgrade文件夾下8個類文件的包名,如圖1-2所示.
如果R文件報錯也要修改成和包名一致撮躁,如圖1-3所示漱病。
步驟2:
在AndroidMainfest.xml文件下添加權(quán)限和service組件买雾,如圖2-1所示。
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<service
android:name="com.包名.upgrade.DownloadService"
android:exported="true"/>
接著在android/app/src/main/res/values/strings.xml文件下添加
<string name="android_auto_update_download_progress">正在下載:%1$d%%</string>
步驟3:
到MainApplication.java文件下杨帽,先添加一下代碼漓穿,導(dǎo)入UpgradePackage.java文件
import 項目工程包名.UpgradePackage;
然后在getPackages()方法中添加new UpUpgradePackage()
,如圖3-1所示注盈。
步驟4:
到需要添加檢測版本更新的代碼頁面下晃危,先導(dǎo)入NativeModules模塊,如圖4-1所示老客。
接著在構(gòu)造方法里添加APP下載地址僚饭,如圖4-2所示。
接著在需要觸發(fā)檢測版本更新功能的地方添加
NativeModules.upgrade.upgrade(this.state.apkUrl);
例如胧砰,在我自己的項目下鳍鸵,我為檢測版本更新功能所寫的代碼
<ItemActionViews
onPress={() => this.checkVersion()} //觸發(fā)checkVersion()版本檢查方法
showTitle="當前版本" showText={this.state.localVersion}/>
//版本檢查
checkVersion() {
let version = this.state.version; //api中的版本號
let localVersion = this.state.localVersion; //本地版本號
console.log('最新版本:' + version);
console.log('當前版本:' + localVersion);
if (Platform.OS === 'android') {
if (version != localVersion) {
Alert.alert('', '最新版本為' + version + ',是否下載', [{text: '取消', onPress: () => console.log('取消')}, {
text: '確定', onPress: () => {
NativeModules.upgrade.upgrade(this.state.apkUrl);
}
},]);
} else {
Toast.show('當前為最新版本');
}
} else {
NativeModules.upgrade.upgrade('1297109983', (msg) => {
if ('YES' == msg) {
//跳轉(zhuǎn)到APP Stroe
NativeModules.upgrade.openAPPStore('1297109983');
} else {
Toast.show('當前為最新版本');
}
})
}
};
如果在配置中出現(xiàn)問題尉间,請留言指出或參考組件的github地址偿乖,我會力所能及解答疑惑。