Я швидко створюю музичний додаток. Додаток дозволяє користувачам відтворювати музику через підписку Apple Music через додаток Apple Music. Я можу перевірити, чи є у користувача підписку на Apple Music через:
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")
}
}
Однак: існують сценарії, коли хтось з якихось причин має передплату Apple Music, але не завантажує додаток Apple Music на свій пристрій. Якщо у користувача є передплата, але не пристрій, я хочу по суті ставитися до цього випадку так, ніби вони взагалі не мають підписки, тобто ми не можемо відтворювати музику через Apple Music.
Отже, я шукаю способи додати чек на те, чи є Apple Music на пристрої користувача. Я знаходжу цю відповідь: Перевірте , чи встановлено додаток з допомогою Swift в поєднанні з цим ресурсом для пошуку схеми URL - адреси Apple Music в і зробити висновок я можу перевірити , якщо користувач має як підписку Apple Music і додаток Apple Music , встановлене на пристрої з допомогою:
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")
}
}
Проблема полягає навіть у тому, що після видалення Apple Music зі свого пристрою перший випадок, тобто той, який друкує user has Apple Music subscription and has the apple music app installed
, все ще називається. Я вважаю, що у мене є правильна схема URL-адреси, оскільки при зміні "music://"
на виклик "musi://"
викликується другий випадок, тобто той, що друкує user does not have subscription or doesn't have apple music installed
.
При спробі відкрити програму URL(string: "music://")
Apple Music, видалену через UIApplication.shared.open(URL(string: "music://")!)
, я отримую наступне попередження:
Так чому пристрій говорить, що я можу відкритись URL(string: "music://")
навіть після видалення Apple Music? Чи URL
здатна відкриватися, але результат - це просто подання вищезазначеного попередження? Це правильний спосіб підтвердити, що користувач встановив Apple Music на своєму пристрої? Чи існує навіть спосіб підтвердити, чи користувач встановив на своєму пристрої Apple Music? Якщо Apple надає користувачам можливість видалити додаток Apple Music, вони також повинні надати розробникам можливість перевірити, чи встановлено додаток.
URL(string: "music://trackId=1377813289")!
, URL(string: "music://track=1377813289")
, URL(string: "music://artist=562555")!
, URL(string: "music://artistId=562555")!
. Єдиний спосіб, яким я зміг надати глибоке посилання, - це щось подібне URL(string: "https://music.apple.com/us/artist/562555")!
, але це, очевидно, не допомагає, оскільки це HTTP.
UIApplication.shared.canOpenURL(URL(string: "music://")!)
повертається true
, навіть якщо додаток Apple Music видалено. Мені потрібно повернутися, false
коли додаток видалено. Біла схема URL-адреси не виправить цю проблему (я спробував її).
URL(string: "music://trackID=3214534")
.: Можливо, до цієї явної URL-схеми трактуватимуться звичайним способом, але не викликаютьapp restore
попередження.