Szybko tworzę aplikację muzyczną. Aplikacja pozwala użytkownikom odtwarzać muzykę w ramach subskrypcji Apple Music za pośrednictwem aplikacji Apple Music. Jestem w stanie sprawdzić, czy użytkownik ma subskrypcję Apple Music przez:
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")
}
}
Jednak: istnieją scenariusze, w których ktoś z jakiegoś powodu będzie miał subskrypcję Apple Music, ale nie pobierze aplikacji Apple Music na swoje urządzenie. Jeśli użytkownik ma subskrypcję, ale nie ma urządzenia, chcę zasadniczo potraktować tę sprawę tak, jakby w ogóle nie miała subskrypcji, tzn. Nie możemy odtwarzać muzyki za pośrednictwem Apple Music.
Dlatego szukam sposobów na dodanie sprawdzenia, czy Apple Music jest na urządzeniu użytkownika. Uważam tę odpowiedź: Sprawdź, czy aplikacja jest zainstalowana przy użyciu Swift łączone z tego zasobu do znalezienia schematu URL Apple Music za i stwierdzić mogę sprawdzić, czy użytkownik ma zarówno subskrypcji Apple Music oraz aplikacji Apple Music zainstalowanego na swoim urządzeniu poprzez:
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")
}
}
Problemem jest, nawet po usunięciu Apple Music z mojego urządzenia, pierwszy przypadek, tj. Ten, który drukuje, user has Apple Music subscription and has the apple music app installed
jest nadal wywoływany. Wydaje mi się, że mam prawidłowy schemat adresu URL, ponieważ podczas zmiany "music://"
na wywoływany jest "musi://"
drugi przypadek, tj. Ten, który drukuje user does not have subscription or doesn't have apple music installed
.
Podczas próby otwarcia za URL(string: "music://")
pomocą Apple Music usuniętej za pośrednictwem UIApplication.shared.open(URL(string: "music://")!)
pojawia się następujący alert:
Dlaczego więc urządzenie mówi, że mogę otworzyć URL(string: "music://")
nawet po usunięciu Apple Music? Czy URL
można otworzyć, ale wynikiem jest po prostu prezentacja powyższego ostrzeżenia? Czy to właściwy sposób na potwierdzenie, że użytkownik ma zainstalowaną aplikację Apple Music na swoim urządzeniu? Czy istnieje sposób na potwierdzenie, że użytkownik ma zainstalowaną aplikację Apple Music na swoim urządzeniu? Jeśli Apple daje użytkownikom opcję usunięcia aplikacji Apple Music, powinni także dać programistom możliwość sprawdzenia, czy aplikacja jest zainstalowana.
URL(string: "music://trackId=1377813289")!
, URL(string: "music://track=1377813289")
, URL(string: "music://artist=562555")!
, URL(string: "music://artistId=562555")!
. Jedynym sposobem, w jaki udało mi się uzyskać głębokie łącze, jest coś takiego URL(string: "https://music.apple.com/us/artist/562555")!
, ale to oczywiście nie pomaga, ponieważ jest to HTTP.
UIApplication.shared.canOpenURL(URL(string: "music://")!)
wraca true
, nawet jeśli aplikacja Apple Music zostanie usunięta. Potrzebuję go zwrócić false
po usunięciu aplikacji. Dodanie białej listy do schematu URL nie rozwiąże tego problemu (próbowałem).
URL(string: "music://trackID=3214534")
.: Być może ten wyraźny schemat adresów URL będzie traktowany w zwykły sposób, ale nie wywołaapp restore
alarmu.