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.
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 seperti URL(string: "https://music.apple.com/us/artist/562555")!
, tapi ini jelas tidak membantu karena ini adalah HTTP.
UIApplication.shared.canOpenURL(URL(string: "music://")!)
selalu kembali true
, bahkan jika aplikasi Apple Music dihapus. Saya membutuhkannya untuk kembali false
ketika aplikasi dihapus. Daftar putih skema url tidak akan memperbaiki masalah ini (saya mencobanya).
URL(string: "music://trackID=3214534")
. : . Mungkin skema url eksplisit ini akan diperlakukan dengan cara biasa, tetapi tidak memicuapp restore
peringatan.