Estoy haciendo una aplicación de música con rapidez. La aplicación permite a los usuarios reproducir música a través de su suscripción a Apple Music a través de su aplicación Apple Music. Puedo verificar si el usuario tiene una suscripción a Apple Music a través de:
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")
}
}
Sin embargo: hay escenarios en los que, por alguna razón, alguien tendrá una suscripción a Apple Music pero no tendrá la aplicación Apple Music descargada en su dispositivo. Si el usuario tiene la suscripción pero no el dispositivo, esencialmente quiero tratar ese caso como si no tuviera una suscripción, es decir, no podemos reproducir música a través de Apple Music.
Entonces, busco formas de agregar una verificación de si Apple Music está en el dispositivo del usuario. Encuentro que esta respuesta: Comprobar si una aplicación se instala mediante Swift combinado con este recurso para encontrar esquema de URL de Apple Música y concluir que puedo comprobar si un usuario tiene tanto una suscripción de Apple Música y la aplicación de Apple Música instalado en su dispositivo a través de:
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")
}
}
El problema es, incluso después de eliminar Apple Music de mi dispositivo, el primer caso, es decir, el que imprime user has Apple Music subscription and has the apple music app installed
todavía se llama. Creo que tengo el esquema de URL correcto porque al cambiar "music://"
a "musi://"
, user does not have subscription or doesn't have apple music installed
se llama al segundo caso, es decir, al que imprime .
Cuando intento abrir URL(string: "music://")
con Apple Music eliminado UIApplication.shared.open(URL(string: "music://")!)
, recibo la siguiente alerta:
Entonces, ¿por qué el dispositivo dice que puedo abrir URL(string: "music://")
incluso después de eliminar Apple Music? ¿Es URL
capaz de abrirse, pero el resultado es simplemente la presentación de la alerta anterior? ¿Es esta la forma correcta de confirmar que el usuario tiene Apple Music instalado en su dispositivo? ¿Existe alguna forma de confirmar que el usuario tiene Apple Music instalado en su dispositivo? Si Apple les da a los usuarios la opción de eliminar la aplicación Apple Music, también deberían darles a los desarrolladores la posibilidad de verificar si la aplicación está instalada.
URL(string: "music://trackId=1377813289")!
, URL(string: "music://track=1377813289")
, URL(string: "music://artist=562555")!
, URL(string: "music://artistId=562555")!
. La única forma en que he podido hacer un enlace profundo es a través de algo como esto URL(string: "https://music.apple.com/us/artist/562555")!
, pero esto obviamente no ayuda, ya que es HTTP.
UIApplication.shared.canOpenURL(URL(string: "music://")!)
está regresando true
todo el tiempo, incluso si se elimina la aplicación Apple Music. Necesito que regrese false
cuando se elimine la aplicación. Incluir en la lista blanca el esquema de URL no solucionará este problema (lo intenté)
URL(string: "music://trackID=3214534")
. : . Tal vez este esquema de URL explícito se trataría de la manera habitual, pero no desencadenaría unaapp restore
alerta.