Peringatan
Bereaksi codepush asli tidak akan mendukung arsitektur baru. Untuk menggunakan plugin ini pada versi React Native mulai dari 0,76, Anda harus memilih keluar dari arsitektur baru.
Catatan: Readme ini hanya relevan dengan versi terbaru dari plugin kami. Jika Anda menggunakan versi yang lebih lama, silakan beralih ke tag yang relevan pada repo GitHub kami untuk melihat dokumen untuk versi tertentu.
Plugin ini menyediakan integrasi sisi klien untuk layanan Codepush, memungkinkan Anda untuk dengan mudah menambahkan pengalaman pembaruan dinamis ke aplikasi React Native Anda.
Aplikasi React Native terdiri dari file JavaScript dan gambar yang menyertainya, yang dibundel bersama oleh Metro Bundler dan didistribusikan sebagai bagian dari biner khusus platform (yaitu file .ipa
atau .apk
). Setelah aplikasi dirilis, memperbarui kode JavaScript (misalnya membuat perbaikan bug, menambahkan fitur baru) atau aset gambar, mengharuskan Anda untuk mengkompilasi ulang dan mendistribusikan kembali seluruh biner, yang tentu saja, termasuk waktu tinjauan yang terkait dengan toko tersebut Anda sedang menerbitkan.
Plugin CodePush membantu mendapatkan peningkatan produk di depan pengguna akhir Anda secara instan, dengan menjaga javascript dan gambar Anda disinkronkan dengan pembaruan yang Anda rilis ke server CodePush. Dengan cara ini, aplikasi Anda mendapatkan manfaat dari pengalaman seluler offline, serta kelincahan "seperti web" dari pembaruan pemuatan samping segera setelah tersedia. Ini win-win!
Untuk memastikan bahwa pengguna akhir Anda selalu memiliki versi yang berfungsi dari aplikasi Anda, plugin CodePush memelihara salinan pembaruan sebelumnya, sehingga jika Anda secara tidak sengaja mendorong pembaruan yang mencakup kerusakan, secara otomatis dapat memutar kembali. Dengan cara ini, Anda dapat yakin bahwa kelincahan rilis baru Anda tidak akan mengakibatkan pengguna diblokir sebelum Anda memiliki kesempatan untuk kembali ke server. Ini adalah win-win-win!
Catatan: Perubahan produk apa pun yang menyentuh kode asli (misalnya memodifikasi file AppDelegate.m
/ MainActivity.java
Anda, menambahkan plugin baru) tidak dapat didistribusikan melalui codepush, dan oleh karena itu, harus diperbarui melalui toko yang sesuai.
Kami mencoba yang terbaik untuk mempertahankan kompatibilitas mundur plugin kami dengan versi sebelumnya dari React Native, tetapi karena sifat platform, dan adanya perubahan perubahan antara rilis, ada kemungkinan bahwa Anda perlu menggunakan versi spesifik dari codepushush Plugin untuk mendukung versi tepat dari React Native yang Anda gunakan. Tabel berikut ini menguraikan versi codepush plugin secara resmi mendukung masing -masing versi Native React:
Bereaksi versi asli | Versi codepush mendukung |
---|---|
<0,14 | Tidak didukung |
V0.14 | V1.3 (Dukungan Android yang Diperkenalkan) |
V0.15-V0.18 | V1.4-V1.6 (Dukungan Asset IOS yang Diperkenalkan) |
V0.19-V0.28 | V1.7-V1.17 (Dukungan Aset Android yang Diperkenalkan) |
V0.29-V0.30 | V1.13-V1.17 (RN Refactored Native Hosting Code) |
V0.31-V0.33 | V1.14.6-V1.17 (RN Refactored Native Hosting Code) |
V0.34-V0.35 | V1.15-V1.17 (RN Refactored Native Hosting Code) |
V0.36-V0.39 | V1.16-V1.17 (RN Refactored Resume Handler) |
V0.40-V0.42 | v1.17 (file header iOS refactored RN) |
V0.43-V0.44 | V2.0+ (RN Refactored Uimanager Dependencies) |
V0.45 | V3.0+ (kode manajer instance RN RN) |
v0.46 | V4.0+ (RN Kode Loader Bundel JS Refaktored) |
V0.46-V0.53 | V5.1+ (RN menghapus pendaftaran modul JS yang tidak digunakan) |
V0.54-V0.55 | V5.3+ (Android Gradle Plugin 3.x Integrasi) |
V0.56-V0.58 | V5.4+ (RN versi yang ditingkatkan untuk alat Android) |
V0.59 | V5.6+ (RN Kode Loader Bundel JS REFACTORED) |
V0.60-V0.61 | V6.0+ (RN bermigrasi ke Autolinking) |
V0.62-V0.64 | V6.2+ (RN dihapus livereload) |
V0.65-V0.70 | V7.0+ (RN yang diperbarui iPhone-target-versi) |
V0.71 | V8.0+ (RN dipindahkan ke React-Native-Gradle-Plugin) |
CATATAN: Versi react-native-code-push
lebih rendah dari v5.7.0 akan berhenti bekerja dalam waktu dekat. Anda dapat menemukan informasi lebih lanjut dalam dokumentasi kami.
Kami bekerja keras untuk menanggapi rilis RN baru, tetapi mereka sesekali menghancurkan kami. Kami akan memperbarui bagan ini dengan setiap rilis RN, sehingga pengguna dapat memeriksa untuk melihat apa dukungan "resmi" kami.
Saat menggunakan sistem aset asli React (yaitu menggunakan sintaksis require("./foo.png")
), daftar berikut ini mewakili himpunan komponen inti (dan alat peraga) yang mendukung memiliki gambar dan video yang direferensikan diperbarui melalui codepush:
Komponen | Prop |
---|---|
Image | source |
MapView.Marker (Membutuhkan react-native-maps >=O.3.2 ) | image |
ProgressViewIOS | progressImage , trackImage |
TabBarIOS.Item | icon , selectedIcon |
ToolbarAndroid (Bereaksi asli 0,21,0+) | actions[].icon , logo , overflowIcon |
Video | source |
Daftar berikut mewakili serangkaian komponen (dan alat peraga) yang saat ini tidak mendukung aset mereka diperbarui melalui codepush, karena ketergantungannya pada gambar dan video statis (yaitu menggunakan sintaks { uri: "foo" }
):
Komponen | Prop |
---|---|
SliderIOS | maximumTrackImage , minimumTrackImage , thumbImage , trackImage |
Video | source |
Saat komponen inti baru dirilis, yang mendukung aset referensi, kami akan memperbarui daftar ini untuk memastikan pengguna tahu apa sebenarnya yang mereka harapkan untuk memperbarui menggunakan Codepush.
Catatan: CodePush hanya berfungsi dengan komponen video saat menggunakan require
dalam prop sumber. Misalnya:
< Video source = { require ( "./foo.mp4" ) } / >
Setelah Anda mengikuti instruksi "memulai" tujuan umum untuk menyiapkan akun codepush Anda, Anda dapat memulai aplikasi codepush-ifering aplikasi asli Anda dengan menjalankan perintah berikut dari dalam direktori root aplikasi Anda:
npm install --save react-native-code-push
Seperti semua plugin Native React lainnya, pengalaman integrasi berbeda untuk iOS dan Android, jadi lakukan langkah -langkah pengaturan berikut tergantung pada platform mana yang Anda targetkan. Catatan, jika Anda menargetkan kedua platform, disarankan untuk membuat aplikasi codepush terpisah untuk setiap platform.
Jika Anda ingin melihat bagaimana proyek lain telah terintegrasi dengan Codepush, Anda dapat memeriksa aplikasi contoh yang sangat baik yang disediakan oleh masyarakat. Selain itu, jika Anda ingin dengan cepat membiasakan diri dengan Codepush + React Native, Anda dapat melihat video memulai yang luar biasa yang diproduksi oleh Bilal Budhani dan/atau Deepak Sisodiya.
Catatan: Panduan ini mengasumsikan Anda telah menggunakan perintah react-native init
untuk menginisialisasi proyek Native React Anda. Pada Maret 2017, perintah create-react-native-app
juga dapat digunakan untuk menginisialisasi proyek Native React. Jika menggunakan perintah ini, silakan jalankan npm run eject
di direktori home proyek Anda untuk mendapatkan proyek yang sangat mirip dengan apa yang akan dibuat react-native init
.
Kemudian lanjutkan dengan menginstal modul asli
Dengan plugin codepush diunduh dan ditautkan, dan aplikasi Anda menanyakan codepush dari mana untuk mendapatkan bundel JS yang tepat, satu -satunya yang tersisa adalah menambahkan kode yang diperlukan ke aplikasi Anda untuk mengontrol kebijakan berikut:
Kapan (dan seberapa sering) untuk memeriksa pembaruan? (Misalnya aplikasi mulai, sebagai tanggapan mengklik tombol di halaman Pengaturan, secara berkala pada beberapa interval tetap)
Ketika pembaruan tersedia, bagaimana cara menyajikannya kepada pengguna akhir?
Cara paling sederhana untuk melakukan ini adalah dengan "codepush-ify" komponen root aplikasi Anda. Untuk melakukannya, Anda dapat memilih salah satu dari dua opsi berikut:
Opsi 1: Bungkus komponen root Anda dengan komponen orde tinggi codePush
:
Untuk komponen kelas
import codePush from "react-native-code-push" ;
class MyApp extends Component {
}
MyApp = codePush ( MyApp ) ;
Untuk komponen fungsional
import codePush from "react-native-code-push" ;
let MyApp : ( ) => React$Node = ( ) => {
}
MyApp = codePush ( MyApp ) ;
Opsi 2: Gunakan Sintaks Dekorator ES7:
Catatan: Dekorator belum didukung dalam pembaruan proposal Babel 6.x yang tertunda. Anda mungkin perlu mengaktifkannya dengan memasang dan menggunakan Babel-Preset-React-Native-Stage-0.
Untuk komponen kelas
import codePush from "react-native-code-push" ;
@ codePush
class MyApp extends Component {
}
Untuk komponen fungsional
import codePush from "react-native-code-push" ;
const MyApp : ( ) => React$Node = ( ) => {
}
export default codePush ( MyApp ) ;
Secara default, CodePush akan memeriksa pembaruan pada setiap aplikasi mulai. Jika pembaruan tersedia, itu akan diunduh secara diam -diam, dan diinstal saat berikutnya aplikasi dimulai kembali (baik secara eksplisit oleh pengguna akhir atau oleh OS), yang memastikan pengalaman paling tidak invasif bagi pengguna akhir Anda. Jika pembaruan yang tersedia adalah wajib, maka akan segera diinstal, memastikan bahwa pengguna akhir mendapatkannya sesegera mungkin.
Jika Anda ingin aplikasi Anda menemukan pembaruan lebih cepat, Anda juga dapat memilih untuk menyinkronkan dengan server CodePush setiap kali aplikasi dilanjutkan dari latar belakang.
Untuk komponen kelas
let codePushOptions = { checkFrequency : codePush . CheckFrequency . ON_APP_RESUME } ;
class MyApp extends Component {
}
MyApp = codePush ( codePushOptions ) ( MyApp ) ;
Untuk komponen fungsional
let codePushOptions = { checkFrequency : codePush . CheckFrequency . ON_APP_RESUME } ;
let MyApp : ( ) => React$Node = ( ) => {
}
MyApp = codePush ( codePushOptions ) ( MyApp ) ;
Atau, jika Anda ingin kontrol berbutir halus ketika cek terjadi (seperti tombol tekan atau interval timer), Anda dapat menghubungi CodePush.sync()
kapan saja dengan SyncOptions
yang diinginkan, dan secara opsional mematikan pemeriksaan otomatis Codepush dengan menentukan a Manual checkFrequency
:
let codePushOptions = { checkFrequency : codePush . CheckFrequency . MANUAL } ;
class MyApp extends Component {
onButtonPress ( ) {
codePush . sync ( {
updateDialog : true ,
installMode : codePush . InstallMode . IMMEDIATE
} ) ;
}
render ( ) {
return (
< View >
< TouchableOpacity onPress = { this . onButtonPress } >
< Text > Check for updates < / Text >
< / TouchableOpacity >
< / View >
)
}
}
MyApp = codePush ( codePushOptions ) ( MyApp ) ;
Jika Anda ingin menampilkan dialog konfirmasi pembaruan ("instalasi aktif"), konfigurasikan ketika pembaruan yang tersedia diinstal (seperti memaksa restart langsung) atau menyesuaikan pengalaman pembaruan dengan cara lain, lihat referensi API codePush()
Untuk informasi tentang cara mengubah perilaku default ini.
Catatan: Jika Anda menggunakan Redux dan Redux Saga, Anda dapat menggunakan modul react-native-code-push-saga, yang memungkinkan Anda untuk menyesuaikan ketika sync
dipanggil dengan cara yang mungkin lebih sederhana/lebih idiomatik.
Android Google Play dan iOS App Store memiliki pedoman yang sesuai yang memiliki aturan yang harus Anda ketahui sebelum mengintegrasikan solusi codepush dalam aplikasi Anda.
Paragraf ketiga Topik Penyalahgunaan Perangkat dan Jaringan Jelaskan bahwa memperbarui kode sumber dengan metode apa pun selain mekanisme pembaruan Google Play dibatasi. Tetapi pembatasan ini tidak berlaku untuk memperbarui bundel JavaScript.
Pembatasan ini tidak berlaku untuk kode yang berjalan dalam mesin virtual dan memiliki akses terbatas ke API Android (seperti JavaScript di Webview atau Browser).
Itu sepenuhnya memungkinkan codepush karena memperbarui hanya bundel JS dan tidak dapat memperbarui bagian kode asli.
Paragraf 3.3.2 , sejak kembali pada perjanjian lisensi program pengembang Apple tahun 2015 sepenuhnya memungkinkan melakukan pembaruan over-the-air dari JavaScript dan aset-dan dalam versi terbarunya (20170605) yang dapat diunduh di sini putusan ini bahkan lebih luas:
Kode yang ditafsirkan dapat diunduh ke suatu aplikasi tetapi hanya selama kode tersebut: (a) tidak mengubah tujuan utama aplikasi dengan menyediakan fitur atau fungsionalitas yang tidak konsisten dengan tujuan aplikasi yang dimaksudkan dan diiklankan sebagaimana diajukan ke aplikasi tersebut Store, (b) tidak membuat toko atau etalase untuk kode atau aplikasi lain, dan (c) tidak memotong penandatanganan, kotak pasir, atau fitur keamanan OS lainnya.
Codepush memungkinkan Anda untuk mengikuti aturan ini secara penuh selama pembaruan yang Anda dorong tidak secara signifikan menyimpang produk Anda dari niat yang disetujui App Store yang disetujui.
Untuk lebih jauh sesuai dengan pedoman Apple, kami menyarankan agar aplikasi yang didistribusikan di toko tidak mengaktifkan opsi updateDialog
saat memanggil sync
, karena dalam pedoman ulasan App Store ditulis bahwa:
Aplikasi tidak boleh memaksa pengguna untuk menilai aplikasi, meninjau aplikasi, mengunduh aplikasi lain, atau tindakan serupa lainnya untuk mengakses fungsionalitas, konten, atau penggunaan aplikasi.
Ini tidak selalu terjadi untuk updateDialog
, karena tidak akan memaksa pengguna untuk mengunduh versi baru, tetapi setidaknya Anda harus mengetahui putusan itu jika Anda memutuskan untuk menunjukkannya.
Setelah aplikasi Anda dikonfigurasi dan didistribusikan kepada pengguna Anda, dan Anda telah membuat beberapa perubahan JS atau aset, saatnya untuk melepaskannya. Cara yang disarankan untuk merilisnya adalah menggunakan perintah release-react
di CLI pusat aplikasi, yang akan menggabungkan file JavaScript Anda, file aset, dan melepaskan pembaruan ke server CodePush.
Catatan: Sebelum Anda dapat mulai merilis pembaruan, silakan masuk ke App Center dengan menjalankan perintah appcenter login
.
Dalam bentuknya yang paling dasar, perintah ini hanya membutuhkan satu parameter: nama pemilik Anda + "/" + nama aplikasi.
appcenter codepush release-react -a < ownerName > / < appName >
appcenter codepush release-react -a < ownerName > /MyApp-iOS
appcenter codepush release-react -a < ownerName > /MyApp-Android
Perintah release-react
memungkinkan alur kerja yang sederhana karena menyediakan banyak default yang masuk akal (seperti menghasilkan bundel rilis, dengan asumsi file entri aplikasi Anda di iOS adalah index.ios.js
atau index.js
). Namun, semua default ini dapat disesuaikan untuk memungkinkan fleksibilitas tambahan seperlunya, yang membuatnya cocok untuk sebagian besar skenario.
# Release a mandatory update with a changelog
appcenter codepush release-react -a < ownerName > /MyApp-iOS -m --description " Modified the header color "
# Release an update for an app that uses a non-standard entry file name, and also capture
# the sourcemap file generated by react-native bundle
appcenter codepush release-react -a < ownerName > /MyApp-iOS --entry-file MyApp.js --sourcemap-output ../maps/MyApp.map
# Release a dev Android build to just 1/4 of your end users
appcenter codepush release-react -a < ownerName > /MyApp-Android --rollout 25 --development true
# Release an update that targets users running any 1.1.* binary, as opposed to
# limiting the update to exact version name in the build.gradle file
appcenter codepush release-react -a < ownerName > /MyApp-Android --target-binary-version " ~1.1.0 "
Klien CodePush mendukung pembaruan diferensial, jadi meskipun Anda merilis bundel dan aset JS Anda pada setiap pembaruan, pengguna akhir Anda hanya akan benar -benar mengunduh file yang mereka butuhkan. Layanan ini menangani ini secara otomatis sehingga Anda dapat fokus pada membuat aplikasi yang luar biasa dan kami dapat khawatir tentang mengoptimalkan unduhan pengguna akhir.
Untuk detail lebih lanjut tentang bagaimana perintah release-react
berfungsi, serta berbagai parameter yang diekspos, lihat dokumen CLI. Selain itu, jika Anda lebih suka menangani menjalankan perintah react-native bundle
sendiri, dan karenanya, menginginkan solusi yang lebih fleksibel daripada release-react
, lihat perintah release
untuk detail lebih lanjut.
Jika Anda mengalami masalah apa pun, atau memiliki pertanyaan/komentar/umpan balik, Anda dapat melakukan ping kami di dalam saluran #-push kode di Reactiflux, email kami dan/atau periksa rincian pemecahan masalah di bawah ini.
Catatan: Pembaruan Codepush harus diuji dalam mode selain mode debug. Dalam mode debug, reaksi aplikasi asli selalu mengunduh bundel js yang dihasilkan oleh packager, jadi js bundle yang diunduh oleh codepush tidak berlaku.
Dalam dokumen awal kami, kami mengilustrasikan cara mengkonfigurasi plugin codepush menggunakan kunci penyebaran tertentu. Namun, untuk menguji rilis Anda secara efektif, sangat penting bagi Anda untuk memanfaatkan penyebaran Staging
dan Production
yang dihasilkan secara otomatis ketika Anda pertama kali membuat aplikasi CodePush Anda (atau penyebaran khusus yang mungkin Anda buat). Dengan cara ini, Anda tidak pernah merilis pembaruan kepada pengguna akhir Anda yang belum dapat Anda validasi.
CATATAN: Fitur rollback sisi klien kami dapat membantu membuka blokir pengguna setelah menginstal rilis yang mengakibatkan kerusakan, dan rollback sisi server (yaitu appcenter codepush rollback
) memungkinkan Anda untuk mencegah pengguna tambahan menginstal rilis yang buruk setelah diidentifikasi. Namun, jelas lebih baik jika Anda dapat mencegah pembaruan yang keliru dirilis secara luas.
Mengambil keuntungan dari Staging
dan penyebaran Production
memungkinkan Anda untuk mencapai alur kerja seperti yang berikut (jangan ragu untuk menyesuaikan!):
Lepaskan pembaruan codepush ke penyebaran Staging
Anda menggunakan perintah appcenter codepush release-react
(atau appcenter codepush release
jika Anda memerlukan lebih banyak kontrol)
Jalankan pementasan/beta Anda dari aplikasi Anda, sinkronkan pembaruan dari server, dan verifikasi berfungsi seperti yang diharapkan
Promosikan rilis yang diuji dari Staging
ke Production
menggunakan perintah appcenter codepush promote
Jalankan Build Produksi/Rilis Anda dari Aplikasi Anda, Sinkronkan Pembaruan dari Server dan Verifikasi berfungsi seperti yang diharapkan
CATATAN: Jika Anda ingin mengambil pendekatan yang lebih hati -hati, Anda bahkan dapat memilih untuk melakukan "peluncuran bertahap" sebagai bagian dari #3, yang memungkinkan Anda untuk mengurangi risiko potensial tambahan dengan pembaruan (seperti pengujian Anda di #2 Touch All All Perangkat/ketentuan yang mungkin?) Dengan hanya membuat pembaruan produksi tersedia untuk persentase pengguna Anda (misalnya appcenter codepush promote -a <ownerName>/<appName> -s Staging -d Production -r 20
). Kemudian, setelah menunggu jumlah waktu yang wajar untuk melihat apakah ada laporan crash atau umpan balik pelanggan, Anda dapat memperluasnya ke seluruh audiens Anda dengan menjalankan appcenter codepush patch -a <ownerName>/<appName> Production -r 100
.
Anda akan melihat bahwa langkah -langkah di atas merujuk pada "pembangunan pementasan" dan "pembangunan produksi" dari aplikasi Anda. Jika proses pembuatan Anda sudah menghasilkan biner yang berbeda per "lingkungan", maka Anda tidak perlu membaca lebih jauh, karena menukar kunci penyebaran codepush sama seperti menangani konfigurasi khusus lingkungan untuk layanan lain yang digunakan aplikasi Anda (seperti Facebook). Namun, jika Anda mencari contoh ( termasuk proyek demo ) tentang cara mengatur proses build Anda untuk mengakomodasi ini, kemudian merujuk ke bagian berikut, tergantung pada platform yang ditargetkan oleh aplikasi Anda:
Bagian di atas menggambarkan bagaimana Anda dapat memanfaatkan beberapa penyebaran codepush untuk menguji pembaruan Anda secara efektif sebelum secara luas merilisnya kepada pengguna akhir Anda. Namun, karena alur kerja itu secara statis menanamkan penugasan penyebaran ke dalam biner yang sebenarnya, pembangunan pementasan atau produksi hanya akan menyinkronkan pembaruan dari penyebaran itu. Dalam banyak kasus, ini cukup, karena Anda hanya ingin tim, pelanggan, pemangku kepentingan, dll. Untuk menyinkronkan dengan rilis pra-produksi Anda, dan oleh karena itu, hanya mereka yang membutuhkan bangunan yang tahu cara menyinkronkan dengan pementasan. Namun, jika Anda ingin dapat melakukan tes A/B, atau memberikan akses awal aplikasi Anda kepada pengguna tertentu, itu dapat terbukti sangat berguna untuk dapat secara dinamis menempatkan pengguna tertentu (atau audiens) ke dalam penyebaran tertentu saat runtime.
Untuk mencapai alur kerja semacam ini, yang perlu Anda lakukan adalah menentukan kunci penyebaran yang Anda ingin pengguna saat ini menyinkronkan saat memanggil metode codePush
. Saat ditentukan, kunci ini akan mengganti yang "default" yang disediakan dalam file Info.plist
aplikasi Anda (iOS) atau MainActivity.java
(Android). Ini memungkinkan Anda untuk menghasilkan bangunan untuk pementasan atau produksi, yang juga mampu secara dinamis "dialihkan" sesuai kebutuhan.
// Imagine that "userProfile" is a prop that this component received
// which includes the deployment key that the current user should use.
codePush . sync ( { deploymentKey : userProfile . CODEPUSH_KEY } ) ;
Dengan perubahan itu, sekarang hanya masalah memilih bagaimana aplikasi Anda menentukan kunci penyebaran yang tepat untuk pengguna saat ini. Dalam praktiknya, biasanya ada dua solusi untuk ini:
Mengekspos mekanisme yang terlihat pengguna untuk mengubah penyebaran kapan saja. Misalnya, halaman Pengaturan Anda dapat memiliki sakelar untuk mengaktifkan akses "beta". Model ini bekerja dengan baik jika Anda tidak peduli dengan privasi pembaruan pra-produksi Anda, dan Anda memiliki pengguna daya yang mungkin ingin ikut serta untuk pembaruan sebelumnya (dan berpotensi kereta) atas keinginan mereka sendiri (semacam saluran krom seperti chrome ). Namun, solusi ini menempatkan keputusan di tangan pengguna Anda, yang tidak membantu Anda melakukan tes A/B secara transparan.
Anotasi profil sisi server pengguna Anda dengan sepotong metadata tambahan yang menunjukkan penyebaran yang harus mereka selaras. Secara default, aplikasi Anda hanya dapat menggunakan kunci biner-embedded, tetapi setelah pengguna telah diautentikasi, server Anda dapat memilih untuk "mengarahkan" mereka ke penyebaran yang berbeda, yang memungkinkan Anda untuk secara bertahap menempatkan pengguna atau grup tertentu dalam penyebaran yang berbeda sesuai kebutuhan . Anda bahkan dapat memilih untuk menyimpan respons server di penyimpanan lokal sehingga menjadi default baru. Bagaimana Anda menyimpan kunci di samping profil pengguna Anda sepenuhnya tergantung pada solusi otentikasi Anda (misalnya auth0, firebase, kustom DB + REST API), tetapi umumnya cukup sepele untuk dilakukan.
Catatan: Jika perlu, Anda juga dapat mengimplementasikan solusi hybrid yang memungkinkan pengguna akhir Anda untuk beralih antara penyebaran yang berbeda, sementara juga memungkinkan server Anda untuk mengesampingkan keputusan itu. Dengan cara ini, Anda memiliki hierarki "resolusi penyebaran" yang memastikan aplikasi Anda memiliki kemampuan untuk memperbarui dirinya sendiri di luar kotak, pengguna akhir Anda dapat merasa dihargai dengan mendapatkan akses awal ke bit, tetapi Anda juga memiliki kemampuan untuk melakukannya Jalankan tes A/B pada pengguna Anda sesuai kebutuhan.
Karena kami sarankan menggunakan penyebaran Staging
untuk pengujian pra-pelepasan pembaruan Anda (seperti yang dijelaskan di bagian sebelumnya), tidak perlu masuk akal untuk menggunakannya untuk melakukan tes A/B pada pengguna Anda, sebagai lawan dari memungkinkan awal- akses (seperti yang dijelaskan dalam opsi #1 di atas). Oleh karena itu, kami sarankan memanfaatkan sepenuhnya penyebaran aplikasi kustom, sehingga Anda dapat mensegmentasi pengguna Anda namun masuk akal untuk kebutuhan Anda. Misalnya, Anda dapat membuat penyebaran jangka panjang atau bahkan sekali saja, melepaskan varian aplikasi Anda untuk itu, dan kemudian menempatkan pengguna tertentu ke dalamnya untuk melihat bagaimana mereka terlibat.
// #1) Create your new deployment to hold releases of a specific app variant
appcenter codepush deployment add - a < ownerName > / <appName> test-variant-one
// #2) Target any new releases at that custom deployment
appcenter codepush release - react - a < ownerName > / <appName> -d test-variant-one
Catatan: Total jumlah pengguna yang dilaporkan dalam "instalasi metrik" penyebaran Anda akan mempertimbangkan pengguna yang telah "beralih" dari satu penyebaran ke yang lain. Misalnya, jika penyebaran Production
Anda saat ini melaporkan memiliki 1 total pengguna, tetapi Anda secara dinamis mengalihkan pengguna itu ke Staging
, maka penyebaran Production
akan melaporkan 0 total pengguna, sementara Staging
akan melaporkan 1 (pengguna yang baru saja beralih). Perilaku ini memungkinkan Anda untuk secara akurat melacak adopsi rilis Anda, bahkan jika menggunakan solusi pengalihan penempatan berbasis runtime.
Komunitas React Native telah dengan ramah menciptakan beberapa aplikasi open source yang luar biasa yang dapat berfungsi sebagai contoh bagi pengembang yang sedang memulai. Berikut ini adalah daftar aplikasi asli OSS React yang juga menggunakan codepush, dan karenanya dapat digunakan untuk melihat bagaimana orang lain menggunakan layanan ini:
Selain itu, jika Anda ingin memulai dengan React Native + Codepush, dan mencari starter kit yang luar biasa, Anda harus memeriksa yang berikut:
Catatan: Jika Anda telah mengembangkan aplikasi React Native menggunakan CodePush, itu juga open-source, beri tahu kami. Kami ingin menambahkannya ke daftar ini!
Metode sync
mencakup banyak pencatatan diagnostik di luar kotak, jadi jika Anda menghadapi masalah saat menggunakannya, hal terbaik untuk dicoba adalah memeriksa log keluaran aplikasi Anda. Ini akan memberi tahu Anda apakah aplikasi dikonfigurasi dengan benar (seperti dapatkah plugin menemukan kunci penyebaran Anda?), Jika aplikasi dapat mencapai server, jika pembaruan yang tersedia ditemukan, jika pembaruan berhasil diunduh/diinstal, dll. Kami ingin terus meningkatkan logging menjadi seintuitif/komprehensif mungkin, jadi beri tahu kami jika Anda merasa itu membingungkan atau melewatkan apa pun.
Cara paling sederhana untuk melihat log ini adalah dengan menambahkan bendera --debug
untuk setiap perintah. Ini akan menghasilkan aliran log yang disaring hanya dengan pesan codepush. Ini membuatnya mudah untuk mengidentifikasi masalah, tanpa perlu menggunakan alat spesifik platform, atau mengarungi volume log yang berpotensi tinggi.
Selain itu, Anda juga dapat menggunakan salah satu alat spesifik platform untuk melihat log codepush, jika Anda lebih nyaman dengan mereka. Start Up Simple Up Konsol Chrome DevTools, Konsol Xcode (IOS), Konsol OS X (iOS) dan/atau ADB LogCat (Android), dan cari pesan yang diawali dengan [CodePush]
.
Perhatikan bahwa secara default, reaksi log asli dinonaktifkan di iOS di rilis build, jadi jika Anda ingin melihatnya dalam rilis build, Anda perlu membuat perubahan berikut pada file AppDelegate.m
Anda:
Tambahkan pernyataan #import <React/RCTLog.h>
. Untuk RN <V0.40 Gunakan: #import "RCTLog.h"
Tambahkan pernyataan berikut ke bagian atas application:didFinishLaunchingWithOptions
Metode:
RCTSetLogThreshold (RCTLogLevelInfo);
Sekarang Anda akan dapat melihat log codepush baik dalam mode debug atau rilis, di iOS atau Android. Jika memeriksa log tidak memberikan indikasi masalah ini, silakan merujuk ke masalah umum berikut untuk ide resolusi tambahan:
Masalah / gejala | Solusi yang mungkin |
---|---|
Kesalahan kompilasi | Periksa ganda bahwa versi React Native Anda kompatibel dengan versi codepush yang Anda gunakan. |
Timeout / hang jaringan saat menelepon sync atau checkForUpdate di simulator iOS | Coba setel ulang simulator dengan memilih Simulator -> Reset Content and Settings.. item menu, dan kemudian menjalankan kembali aplikasi Anda. |
Server merespons dengan 404 saat memanggil sync atau checkForUpdate | Periksa ulang bahwa kunci penerapan yang Anda tambahkan ke Info.plist Anda (iOS), build.gradle (android) atau bahwa Anda lulus untuk sync / checkForUpdate , sebenarnya benar. Anda dapat menjalankan appcenter codepush deployment list <ownerName>/<appName> --displayKeys untuk melihat kunci yang benar untuk penyebaran aplikasi Anda. |
Perbarui tidak ditemukan | Periksa ulang bahwa versi aplikasi Anda berjalan (seperti 1.0.0 ) cocok dengan versi yang Anda tentukan saat merilis pembaruan ke Codepush. Selain itu, pastikan bahwa Anda merilis ke penyebaran yang sama dengan yang dikonfigurasi oleh aplikasi Anda untuk disinkronkan. |
Perbarui tidak ditampilkan setelah restart | Jika Anda tidak menelepon sync pada aplikasi mulai (seperti di dalam componentDidMount dari komponen root Anda), maka Anda perlu secara eksplisit memanggil notifyApplicationReady on App Start, jika tidak, plugin akan berpikir pembaruan Anda gagal dan menggulungnya kembali. |
Saya telah merilis pembaruan untuk iOS tetapi aplikasi Android saya juga menunjukkan pembaruan dan memecahnya | Pastikan Anda memiliki kunci penyebaran yang berbeda untuk setiap platform untuk menerima pembaruan dengan benar |
Saya telah merilis pembaruan baru tetapi perubahan tidak tercermin | Pastikan Anda menjalankan aplikasi dalam mode selain debug. Dalam mode debug, reaksi aplikasi asli selalu mengunduh bundel js yang dihasilkan oleh packager, jadi js bundle yang diunduh oleh codepush tidak berlaku. |
Tidak ada bundel JS yang ditemukan saat menjalankan aplikasi Anda terhadap simulator iOS | Secara default, React Native tidak menghasilkan bundel JS Anda saat berlari melawan simulator. Oleh karena itu, jika Anda menggunakan [CodePush bundleURL] , dan menargetkan simulator iOS, Anda mungkin mendapatkan hasil nil . Masalah ini akan diperbaiki di RN 0.22.0, tetapi hanya untuk pembuatan rilis. Anda dapat membuka blokir skenario ini sekarang dengan membuat perubahan ini secara lokal. |
Selain dapat menggunakan CODEPUSH CLI untuk "secara manual" melepaskan pembaruan, kami percaya bahwa penting untuk membuat solusi yang berulang dan berkelanjutan untuk memberikan pembaruan secara memikul ke aplikasi Anda. Dengan begitu, cukup sederhana untuk Anda dan/atau tim Anda untuk membuat dan mempertahankan ritme penempatan yang gesit. Untuk membantu menyiapkan pipa CD berbasis codepush, lihat integrasi berikut dengan berbagai server CI:
Selain itu, jika Anda ingin lebih detail tentang seperti apa alur kerja CI/CD seluler yang lengkap, yang termasuk codepush, lihat artikel yang luar biasa ini oleh tim rekayasa ZeeMee.
Modul ini mengirimkan file *.d.ts
sebagai bagian dari paket NPM-nya, yang memungkinkan Anda untuk hanya import
, dan menerima Intellisense dalam pendukung editor (seperti kode studio visual), serta memeriksa jenis waktu kompilasi jika Anda Menggunakan TypeScript. Sebagian besar, perilaku ini hanya harus bekerja di luar kotak, namun, jika Anda telah menentukan es6
sebagai nilai untuk opsi target
atau module
kompiler dalam file tsconfig.json
Anda, maka pastikan Anda juga mengatur Opsi moduleResolution
ke node
. Ini memastikan bahwa kompiler TypeScript akan terlihat di dalam node_modules
untuk definisi jenis modul yang diimpor. Kalau tidak, Anda akan mendapatkan kesalahan seperti yang berikut saat mencoba mengimpor modul react-native-code-push
: error TS2307: Cannot find module 'react-native-code-push'
.
Proyek ini telah mengadopsi kode perilaku open source Microsoft. Untuk informasi lebih lanjut, lihat FAQ Kode Perilaku atau hubungi [email protected] dengan pertanyaan atau komentar tambahan.