Saya membuat aplikasi musik dengan cepat. Aplikasi ini memungkinkan pengguna memutar musik melalui langganan Apple Music mereka melalui aplikasi Apple Music mereka. Saya dapat memeriksa apakah pengguna memiliki langganan Apple Music melalui:
SKCloudServiceController().requestCapabilities { (capability:SKCloudServiceCapability, err:Error?) in
guard err == nil else {
print("error in capability check is \(err!)")
return
}
if capability.contains(SKCloudServiceCapability.musicCatalogPlayback) {
print("user has Apple Music subscription")
}
if capability.contains(SKCloudServiceCapability.musicCatalogSubscriptionEligible) {
print("user does not have subscription")
}
}
Namun: ada skenario di mana seseorang akan, karena alasan tertentu, memiliki langganan Apple Music tetapi tidak memiliki aplikasi Apple Music diunduh di perangkat mereka. Jika pengguna memiliki langganan tetapi bukan perangkat, saya ingin dasarnya memperlakukan kasus itu seolah-olah mereka tidak memiliki langganan sama sekali, yaitu kita tidak dapat memutar musik melalui Apple Music.
Jadi, saya mencari cara untuk menambahkan tanda centang apakah Apple Music ada di perangkat pengguna. Saya menemukan jawaban ini: Periksa apakah aplikasi diinstal menggunakan Swift dikombinasikan dengan sumber daya ini untuk menemukan skema url Apel Music dan menyimpulkan saya dapat memeriksa apakah pengguna memiliki kedua berlangganan Apel Musik dan aplikasi Apel Musik diinstal pada perangkat mereka melalui:
SKCloudServiceController()requestCapabilities { (capability:SKCloudServiceCapability, err:Error?) in
guard err == nil else {
print("error in capability check is \(err!)")
return
}
if capability.contains(SKCloudServiceCapability.musicCatalogPlayback) && UIApplication.shared.canOpenURL(URL(string: "music://")!) {
print("user has Apple Music subscription and has the apple music app installed")
}
if capability.contains(SKCloudServiceCapability.musicCatalogSubscriptionEligible) || !UIApplication.shared.canOpenURL(URL(string: "music://")!) {
print("user does not have subscription or doesn't have apple music installed")
}
}
Masalahnya adalah, bahkan setelah menghapus Apple Music dari perangkat saya, kasus pertama, yaitu yang dicetak user has Apple Music subscription and has the apple music app installed
masih dipanggil. Saya percaya saya memiliki skema url yang benar karena ketika mengubah "music://"
ke "musi://"
, kasus kedua, yaitu yang mencetak user does not have subscription or doesn't have apple music installed
dipanggil.
Ketika mencoba membuka URL(string: "music://")
dengan Apple Music dihapus melalui UIApplication.shared.open(URL(string: "music://")!)
, saya terpukul dengan peringatan berikut:
Jadi mengapa perangkat mengatakan bahwa saya dapat membuka URL(string: "music://")
bahkan setelah Apple Music dihapus? Apakah yang URL
mampu dibuka, tetapi hasilnya hanyalah presentasi dari peringatan di atas? Apakah ini cara yang benar untuk mengonfirmasi bahwa pengguna telah menginstal Apple Music di perangkat mereka? Apakah ada cara untuk mengonfirmasi pengguna telah menginstal Apple Music di perangkat mereka? Jika Apple memberi pengguna opsi untuk menghapus aplikasi Apple Music, mereka juga harus memberi pengembang kemampuan untuk memeriksa apakah aplikasi tersebut diinstal.
sumber
URL(string: "music://trackID=3214534")
. : . Mungkin skema url eksplisit ini akan diperlakukan dengan cara biasa, tetapi tidak memicuapp restore
peringatan.URL(string: "music://trackId=1377813289")!
,URL(string: "music://track=1377813289")
,URL(string: "music://artist=562555")!
,URL(string: "music://artistId=562555")!
. Satu-satunya cara saya dapat tautan dalam adalah melalui sesuatu sepertiURL(string: "https://music.apple.com/us/artist/562555")!
, tapi ini jelas tidak membantu karena ini adalah HTTP.UIApplication.shared.canOpenURL(URL(string: "music://")!)
selalu kembalitrue
, bahkan jika aplikasi Apple Music dihapus. Saya membutuhkannya untuk kembalifalse
ketika aplikasi dihapus. Daftar putih skema url tidak akan memperbaiki masalah ini (saya mencobanya).Jawaban:
Solusi terbaik yang saya miliki, meskipun saya berharap ada sesuatu yang lebih baik di luar sana, adalah digunakan
MPMusicPlayer.prepareToPlay(completionHandler:)
untuk memeriksa apakah ada kesalahan ketika mencoba memainkan trek:Saya tidak yakin bagaimana ini dapat diterapkan pada siapa saja yang menggunakan Apple Music di dalam aplikasi mereka untuk apa pun selain memainkan trek, tetapi ini tampaknya berfungsi sebagai cek ketika Anda akan memainkan cek. Setiap kali saya terkena kesalahan itu, saya cukup membuat lansiran yang memberi tahu individu bahwa mereka memiliki langganan Apple Music tetapi tidak memiliki aplikasi yang diinstal.
Namun, akan lebih baik untuk dapat memeriksa tanpa beberapa handler penyelesaian karena itu akan memungkinkan pemeriksaan boolean diintegrasikan ke dalam pernyataan bersyarat (via
if capability.contains(SKCloudServiceCapability.musicCatalogPlayback) && hasAppleMusicAppInstalled { //do something }
).sumber
Untungnya Apple memberi Anda metode yang mengembalikan false jika tidak ada aplikasi yang diinstal pada perangkat terdaftar untuk menangani skema URL, atau jika Anda belum menyatakan skema URL dalam file Info.plist Anda; jika tidak, benar.
Setelah saya memposting skema url
Tambahkan yang selanjutnya akan Anda gunakan ke file info.plist Anda.
Setelah ini gunakan 'canOpenURL' untuk memeriksa informasi lebih lanjut, periksa dokumen Apple
https://developer.apple.com/documentation/uikit/uiapplication/1622952-canopenurl
sumber
true
saat melewatinyacanOpenUrl
. Itulah masalah utama yang ingin saya bahas dengan pertanyaan ini.Solusi yang mungkin dilakukan adalah sebagai berikut: Mengatur token pengembang melalui Apple Music API (Digunakan agar Anda dapat menanyakan titik akhir Apple Music REST). Kirim permintaan ke fungsi StoreKit berikut ( Dokumentasi ):
Jika token pengembang Anda valid dan nilai token pengguna yang dikembalikan masih nol / nol, maka pengguna perangkat tersebut bukan pelanggan layanan Apple Music. Kesalahan yang dihasilkan dengan kode status HTTP adalah 401 (Tidak Diotorisasi). Ini masih mengharuskan Anda memeriksa kesalahan namun tidak perlu mencoba dan memutar trek tertentu (Terutama karena beberapa alasan jika id konten lagu yang Anda periksa menjadi tidak valid atau diubah).
Untuk masalah akun yang masuk ke perangkat dan berlangganan tetapi tidak mengunduh aplikasi Musik: Tangani kesalahan saat mencoba memutar konten tertentu dan berikan informasi kepada pengguna atau gunakan konten yang tidak memerlukan berlangganan Apple Music sebagai alternatif. saat kesalahan terjadi.
sumber
Ya, Kami dapat memeriksa sebagian besar Aplikasi dengan mengikuti Langkah-langkah ini:
sumber
UIApplication.shared.canOpenUrl(URL(string: “music://”)!)
selalu kembalitrue
, bahkan jika aplikasi tidak diinstal.