Je fais une application musicale avec swift. L'application permet aux utilisateurs de jouer de la musique via leur abonnement Apple Music via leur application Apple Music. Je peux vérifier si l'utilisateur a un abonnement Apple Music via:
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")
}
}
Cependant: il y a des scénarios où quelqu'un aura, pour une raison quelconque, un abonnement Apple Music mais sans que l'application Apple Music soit téléchargée sur son appareil. Si l'utilisateur a l'abonnement mais pas l'appareil, je veux essentiellement traiter ce cas comme s'il n'avait pas d'abonnement du tout, c'est-à-dire que nous ne pouvons pas jouer de la musique via Apple Music.
Donc, je vais chercher des moyens d'ajouter une vérification pour savoir si Apple Music est sur l'appareil de l'utilisateur. Je trouve cette réponse: Vérifiez si une application est installée à l'aide de Swift combinée à cette ressource pour trouver le schéma d'URL d'Apple Music et conclure que je peux vérifier si un utilisateur a à la fois un abonnement Apple Music et l'application Apple Music installés sur leur appareil via:
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")
}
}
Le problème est, même après avoir supprimé Apple Music de mon appareil, le premier cas, c'est-à-dire celui qui imprime user has Apple Music subscription and has the apple music app installed
est toujours appelé. Je crois que j'ai le bon schéma d'URL car lors du passage "music://"
à "musi://"
, le deuxième cas, c'est-à-dire celui qui imprime user does not have subscription or doesn't have apple music installed
est appelé.
Lorsque j'essaie d'ouvrir URL(string: "music://")
avec Apple Music supprimé via UIApplication.shared.open(URL(string: "music://")!)
, je reçois l'alerte suivante:
Alors, pourquoi l'appareil dit-il que je peux ouvrir URL(string: "music://")
même après la suppression d'Apple Music? Est-il URL
capable d'être ouvert, mais le résultat est simplement la présentation de l'alerte ci-dessus? Est-ce la bonne façon de confirmer que l'utilisateur a installé Apple Music sur son appareil? Existe-t-il même un moyen de confirmer que l'utilisateur a installé Apple Music sur son appareil? Si Apple donne aux utilisateurs la possibilité de supprimer l'application Apple Music, ils devraient également donner aux développeurs la possibilité de vérifier si l'application est installée.
URL(string: "music://trackId=1377813289")!
, URL(string: "music://track=1377813289")
, URL(string: "music://artist=562555")!
, URL(string: "music://artistId=562555")!
. La seule façon dont j'ai pu établir un lien profond est via quelque chose comme URL(string: "https://music.apple.com/us/artist/562555")!
, mais cela n'aide évidemment pas car c'est HTTP.
UIApplication.shared.canOpenURL(URL(string: "music://")!)
revient true
tout le temps, même si l'application Apple Music est supprimée. J'en ai besoin pour revenir false
lorsque l'application est supprimée. La liste blanche du schéma d'URL ne résoudra pas ce problème (je l'ai essayé).
URL(string: "music://trackID=3214534")
. : . Peut-être que ce schéma d'URL explicite serait traité de la manière habituelle, mais ne déclencherait pas d'app restore
alerte.