Estou criando um aplicativo de música com rapidez. O aplicativo permite que os usuários reproduzam músicas por meio da assinatura do Apple Music por meio do aplicativo Apple Music. Consigo verificar se o usuário tem uma assinatura do 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")
}
}
No entanto: existem cenários em que alguém, por algum motivo, possui uma assinatura do Apple Music, mas não o aplicativo Apple Music baixado em seu dispositivo. Se o usuário tiver a assinatura, mas não o dispositivo, quero tratar essencialmente esse caso como se eles não tivessem uma assinatura, ou seja, não podemos tocar música pelo Apple Music.
Então, vou procurar maneiras de adicionar uma verificação para ver se o Apple Music está no dispositivo do usuário. Acho que esta resposta: Verificar se um aplicativo é instalado usando Swift combinado com este recurso para encontrar esquema de url da Apple Música e concluir posso verificar se um usuário tem tanto uma assinatura Apple Music e o aplicativo Apple Music instalado em seu dispositivo atravé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")
}
}
O problema é que, mesmo depois de excluir o Apple Music do meu dispositivo, o primeiro caso, ou seja, aquele que imprime user has Apple Music subscription and has the apple music app installed
ainda está sendo chamado. Acredito que possuo o esquema de URL correto, pois ao mudar "music://"
para "musi://"
o segundo caso, ou seja, aquele que imprime user does not have subscription or doesn't have apple music installed
está sendo chamado.
Ao tentar abrir URL(string: "music://")
com o Apple Music excluído via UIApplication.shared.open(URL(string: "music://")!)
, recebo o seguinte alerta:
Então, por que o dispositivo está dizendo que eu posso abrir URL(string: "music://")
mesmo após a exclusão do Apple Music? É URL
capaz de ser aberto, mas o resultado é simplesmente a apresentação do alerta acima? Essa é a maneira correta de confirmar que o usuário tem o Apple Music instalado no dispositivo? Existe alguma maneira de confirmar que o usuário tem o Apple Music instalado no dispositivo? Se a Apple oferecer aos usuários a opção de excluir o aplicativo Apple Music, eles também deverão dar aos desenvolvedores a capacidade de verificar se o aplicativo está instalado.
URL(string: "music://trackId=1377813289")!
, URL(string: "music://track=1377813289")
, URL(string: "music://artist=562555")!
, URL(string: "music://artistId=562555")!
. A única maneira pela qual consegui fazer o link direto é por meio de algo assim URL(string: "https://music.apple.com/us/artist/562555")!
, mas isso obviamente não ajuda, pois é HTTP.
UIApplication.shared.canOpenURL(URL(string: "music://")!)
volta true
sempre, mesmo que o aplicativo Apple Music seja excluído. Preciso retornar false
quando o aplicativo for excluído. A lista de permissões do esquema de URL não corrigirá esse problema (tentei).
URL(string: "music://trackID=3214534")
. : . Talvez esse esquema de URL explícito seja tratado da maneira usual, mas não acione umapp restore
alerta.