Saya ingin memeriksa secara manual apakah ada pembaruan baru untuk aplikasi saya saat pengguna berada di dalamnya, dan memintanya untuk mengunduh versi baru. Dapatkah saya melakukan ini dengan memeriksa versi aplikasi saya di App Store - secara terprogram?
112
NSNumber
nomor versi. Kemudian saya mengunggahnya ke situs web saya. Situs web yang sama yang saya gunakan untuk dukungan aplikasi dan halaman web aplikasi, lalu masukviewDidLoad
, saya memeriksa situs web untuk nomor versi di sana dan saya memeriksa versi saat ini di aplikasi saya. Lalu saya memiliki premadealertView
yang secara otomatis meminta untuk memperbarui aplikasi. Saya dapat memberikan kode jika Anda mau.Jawaban:
Berikut ini potongan kode sederhana yang memberi tahu Anda jika versi saat ini berbeda
Catatan: Pastikan bahwa saat Anda memasukkan versi baru di iTunes, ini cocok dengan versi di aplikasi yang Anda rilis. Jika tidak maka kode di atas akan selalu mengembalikan YA terlepas dari apakah pengguna memperbarui.
sumber
Versi Swift 3:
Saya pikir lebih baik melempar kesalahan daripada mengembalikan false, dalam hal ini saya membuat VersionError tetapi bisa juga yang lain Anda tentukan atau NSError
Pertimbangkan juga untuk memanggil fungsi ini dari thread lain, jika koneksi lambat dapat memblokir thread saat ini.
Memperbarui
Menggunakan URLSession:
Alih-alih menggunakan
Data(contentsOf: url)
dan memblokir utas, kita dapat menggunakanURLSession
:contoh:
sumber
DispatchQueue.global()
memberi Anda antrian latar belakang, data dimuat dalam antrian itu dan hanya kembali ke antrian utama saat data dimuat.Terima kasih kepada Steve Moser untuk tautannya, ini kode saya:
sumber
/en/
subpath. Setelah menghapusnya, itu berhasilKarena saya menghadapi masalah yang sama, saya menemukan jawaban yang diberikan oleh Mario Hendricks . Tidak wajar ketika saya mencoba menerapkan kodenya pada proyek saya, XCode memang mengeluh tentang masalah Casting yang mengatakan "MDLMaterialProperty tidak memiliki anggota subskrip". Kodenya mencoba menyetel MDLMaterial ini ... sebagai jenis "lookupResult" konstan, membuat casting ke "Int" gagal setiap saat. Solusi saya adalah memberikan anotasi tipe untuk variabel saya ke NSDictionary agar jelas tentang jenis nilai yang saya butuhkan. Dengan itu, saya bisa mengakses nilai "versi" yang saya butuhkan.
Obs: Untuk YOURBUNDLEID ini , Anda bisa mendapatkan dari proyek Xcode Anda .... " T Target> General> Identity> Bundle Identifier "
Jadi, inilah kode saya dengan beberapa penyederhanaan juga:
Semua saran untuk perbaikan kode ini diterima!
sumber
Cukup gunakan ATAppUpdater . Ini adalah 1 baris, aman untuk benang dan cepat. Ini juga memiliki metode delegasi jika Anda ingin melacak tindakan pengguna.
Berikut ini contohnya:
Metode delegasi opsional:
sumber
Menyederhanakan jawaban bagus yang diposting di utas ini. Menggunakan
Swift 4
danAlamofire
.Dan kemudian menggunakannya:
sumber
{ "resultCount":0, "results": [] }
Memperbarui kode 4 swift dari Anup Gupta
Saya telah membuat beberapa perubahan pada kode ini . Sekarang fungsi dipanggil dari antrian latar belakang, karena koneksi bisa lambat dan karena itu memblokir utas utama.
Saya juga membuat CFBundleName opsional, karena versi yang disajikan memiliki "CFBundleDisplayName" yang mungkin tidak berfungsi di versi saya. Jadi sekarang jika tidak ada itu tidak akan macet tetapi tidak akan menampilkan Nama Aplikasi dalam peringatan.
Saya melakukan panggilan ini untuk juga menambahkan tombol konfirmasi:
Atau sebut saja seperti ini untuk mengaktifkan opsi pembaruan paksa:
sumber
Ini adalah versi saya menggunakan Swift 4 dan pustaka Alamofire populer (saya tetap menggunakannya di aplikasi saya). Permintaan bersifat asinkron dan Anda dapat meneruskan panggilan balik untuk diberi tahu setelah selesai.
Penggunaannya sederhana seperti ini:
sumber
Dapatkah saya menyarankan perpustakaan kecil ini: https://github.com/nicklockwood/iVersion
Tujuannya adalah untuk menyederhanakan penanganan sambungan jarak jauh untuk memicu pemberitahuan.
sumber
sumber
URLSession
.Jawaban ini adalah modifikasi dari jawaban datinc https://stackoverflow.com/a/25210143/2735358 .
fungsi datinc membandingkan versi dengan perbandingan string. Jadi, itu tidak akan membandingkan versi lebih dari atau kurang dari.
Tapi, fungsi yang dimodifikasi ini membandingkan versi NSNumericSearch (perbandingan numerik) .
Menggunakan:
sumber
Saya melihat banyak cara untuk memeriksa pembaruan Aplikasi. jadi berdasarkan banyak jawaban saya mencampurnya dan membuat solusi saya yang tersedia di GitHub Jika Ada pembaruan yang diperlukan Tolong beri tahu saya. Kode ini untuk Swift 4
Tautan GitHub Ke kode ini. https://github.com/anupgupta-arg/iOS-Swift-ArgAppUpdater
Refrence: https://stackoverflow.com/a/48810541/5855888 Dan https://github.com/emotality/ATAppUpdater
Selamat Coding 👍 😊
sumber
Coba ini dengan satu panggilan fungsi:
Fungsi Peringatan untuk membuka URL AppStore:
Bagaimana memanggil fungsi di atas:
Untuk lebih detail coba link di bawah ini dengan kode lengkap:
AppStoreUpdate.swift
ItunesAppInfoResult.swift
ItunesAppInfoItunes.swift
Saya harap ini akan membantu!
sumber
Berikut adalah metode cepat yang melakukan apa yang disarankan oleh beberapa jawaban Objective-C. Tentunya, setelah Anda mendapatkan info dari toko aplikasi JSON, Anda dapat mengekstrak catatan rilis, jika Anda menginginkannya.
sumber
Jika Anda tidak mengatur jenis konten di NSUrlRequest maka pasti Anda tidak akan mendapatkan respons, jadi coba kode di bawah ini berfungsi dengan baik untuk saya. Semoga membantu ....
sumber
Berasal dari POV Aplikasi Hybrid, ini adalah contoh javascript, saya memiliki footer yang Tersedia Pembaruan di menu utama saya. Jika pembaruan tersedia (mis. Nomor versi saya dalam file konfigurasi kurang dari versi yang diambil, tampilkan footer) Ini kemudian akan mengarahkan pengguna ke toko aplikasi, di mana pengguna kemudian dapat mengklik tombol perbarui.
Saya juga mendapatkan data baru apa (yaitu Catatan Rilis) dan menampilkannya sebagai modal saat login jika ini pertama kali pada versi ini.
Metode Perbarui Tersedia dapat dijalankan sesering Anda suka. Milik saya dijalankan setiap kali pengguna menavigasi ke layar beranda.
Callback: Apple memiliki API, jadi sangat mudah didapat
sumber
Peringatan: Sebagian besar jawaban yang diberikan mengambil URL secara sinkron (menggunakan
-dataWithContentsOfURL:
atau-sendSynchronousRequest:
. Ini buruk, karena itu berarti aplikasi Anda tidak akan responsif selama beberapa menit jika koneksi seluler terputus saat permintaan sedang berlangsung. Jangan pernah melakukan akses internet secara sinkron di utas utama.Jawaban yang benar adalah dengan menggunakan API asinkron:
Batas waktu default untuk koneksi jaringan adalah beberapa menit., Dan bahkan jika permintaan berhasil, ini bisa menjadi cukup lambat melalui koneksi EDGE yang buruk untuk memakan waktu selama itu. Anda tidak ingin aplikasi Anda tidak dapat digunakan dalam kasus itu. Untuk menguji hal-hal seperti ini, akan berguna untuk menjalankan kode jaringan Anda dengan Kondisioner Tautan Jaringan Apple.
sumber
untuk membandingkan string versi:
https://github.com/eure/AppVersionMonitor
sumber
UNTUK SWIFT 4 dan 3.2:
Pertama, kita perlu mendapatkan id bundel dari kamus info bundel, setel isUpdaet sebagai false.
Kemudian kita perlu memanggil panggilan urlSession untuk mendapatkan versi dari itunes.
KODE LENGKAP AKAN SEPERTI INI:
Kemudian kita bisa memanggil fungsi anyware yang kita butuhkan.
sumber
Kesetaraan C # dari @datinc, sebanyak mendapatkan versi Apple App Store. Kode yang disertakan untuk mendapatkan versi bundel atau file AssemblyInfo.
EDIT :: Harap perhatikan wilayah, "/ us /", termasuk dalam urlString. Kode negara ini perlu ditangani / diubah sesuai.
sumber
Pertanyaan ini ditanyakan pada tahun 2011, saya menemukannya pada tahun 2018 saat mencari cara untuk tidak hanya memeriksa versi baru aplikasi di App Store tetapi juga untuk memberi tahu pengguna tentangnya.
Setelah penelitian kecil, saya sampai pada kesimpulan bahwa jawaban juanjo (terkait dengan Swift 3) https://stackoverflow.com/a/40939740/1218405 adalah solusi optimal jika Anda ingin melakukan ini dalam kode sendiri
Saya juga dapat menyarankan dua proyek hebat di GitHub (masing-masing 2300+ bintang)
Contoh Sirene (AppDelegate.swift)
sumber
Cepat 4
Kita dapat menggunakan new
JSONDecoder
untuk mengurai respon dari itunes.apple.com/lookup dan mewakilinya dengan kelas atau struct yang dapat didekodekan:Kita juga dapat menambahkan properti lain
AppInfo
jika kita membutuhkanreleaseNotes
atau beberapa properti lain.Sekarang kita bisa membuat permintaan async menggunakan
URLSession
:fungsi ini menerima penutupan penyelesaian yang akan dipanggil ketika permintaan selesai dan mengembalikan
URLSessionDataTask
seandainya kita perlu membatalkan permintaan, dan bisa dipanggil seperti ini:sumber
LookupResult
danAppInfo
di suatu tempat dalam proyek Anda, sebaiknya dalam file terpisah: Mereka digunakan saat Anda mendekode respons:JSONDecoder().decode(LookupResult.self, from: data)
dan kelas tersebut berisi string versiProposal kode saya. Berdasarkan jawaban oleh @datinc dan @ Mario-Hendricks
Anda tentu saja harus mengganti
dlog_Error
dengan pemanggilan func call Anda.Jenis struktur kode ini akan mencegah aplikasi Anda mogok jika terjadi kesalahan. Untuk mengambil
appStoreAppVersion
bukanlah keharusan, dan tidak menyebabkan kesalahan fatal. Namun, dengan struktur kode semacam ini, Anda masih akan mendapatkan log kesalahan non-fatal Anda.sumber
jika Anda ingin memeriksa versi aplikasi Anda saat ini, gunakan kode sederhana di bawah ini:
sumber