Ich mache eine Musik-App mit Swift. Mit der App können Benutzer Musik über ihr Apple Music-Abonnement über ihre Apple Music-App abspielen. Ich kann überprüfen, ob der Benutzer ein Apple Music-Abonnement hat über:
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")
}
}
Es gibt jedoch Szenarien, in denen jemand aus irgendeinem Grund ein Apple Music-Abonnement hat, die Apple Music-App jedoch nicht auf sein Gerät heruntergeladen hat. Wenn der Benutzer das Abonnement hat, aber nicht das Gerät, möchte ich diesen Fall im Wesentlichen so behandeln, als ob er überhaupt kein Abonnement hat, dh wir können keine Musik über Apple Music abspielen.
Daher suche ich nach Möglichkeiten, um zu überprüfen, ob sich Apple Music auf dem Gerät des Benutzers befindet. Ich finde diese Antwort: Überprüfen Sie, ob eine App mit Swift in Kombination mit dieser Ressource installiert wurde, um das URL-Schema von Apple Music zu finden, und schließen Sie, dass ich überprüfen kann, ob ein Benutzer sowohl ein Apple Music-Abonnement als auch die Apple Music-App auf seinem Gerät installiert hat, und zwar über:
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")
}
}
Das Problem ist, dass auch nach dem Löschen von Apple Music von meinem Gerät der erste Fall, dh der, der gedruckt user has Apple Music subscription and has the apple music app installed
wird, immer noch aufgerufen wird. Ich glaube, ich habe das richtige URL-Schema, weil beim Wechsel "music://"
zum "musi://"
zweiten Fall, dh dem, der gedruckt user does not have subscription or doesn't have apple music installed
wird, aufgerufen wird.
Beim Versuch, URL(string: "music://")
mit über gelöschter Apple Music zu öffnen UIApplication.shared.open(URL(string: "music://")!)
, wird folgende Warnung angezeigt:
Warum sagt das Gerät, dass ich URL(string: "music://")
auch nach dem Löschen von Apple Music öffnen kann ? Kann das URL
geöffnet werden, aber das Ergebnis ist einfach die Darstellung der obigen Warnung? Ist dies der richtige Weg, um zu bestätigen, dass der Benutzer Apple Music auf seinem Gerät installiert hat? Gibt es überhaupt eine Möglichkeit zu bestätigen, dass der Benutzer Apple Music auf seinem Gerät installiert hat? Wenn Apple Benutzern die Möglichkeit gibt, die Apple Music-App zu löschen, sollten sie Entwicklern auch die Möglichkeit geben, zu überprüfen, ob die App installiert ist.
URL(string: "music://trackId=1377813289")!
, URL(string: "music://track=1377813289")
, URL(string: "music://artist=562555")!
, URL(string: "music://artistId=562555")!
. Die einzige Möglichkeit, eine tiefe Verbindung herzustellen, ist über so etwas URL(string: "https://music.apple.com/us/artist/562555")!
, aber dies hilft offensichtlich nicht, da dies HTTP ist.
UIApplication.shared.canOpenURL(URL(string: "music://")!)
es immer wieder zurückkommt true
, auch wenn die Apple Music App gelöscht wird. Ich brauche es, um zurückzukehren, false
wenn die App gelöscht wird. Das Whitelisting des URL-Schemas behebt dieses Problem nicht (ich habe es versucht).
URL(string: "music://trackID=3214534")
. Möglicherweise wird dieses explizite URL-Schema wie gewohnt behandelt, aber keineapp restore
Warnung ausgelöst .