Tôi đang làm một ứng dụng âm nhạc với swift. Ứng dụng cho phép người dùng phát nhạc thông qua thuê bao Apple Music thông qua ứng dụng Apple Music của họ. Tôi có thể kiểm tra xem người dùng có đăng ký Apple Music qua:
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")
}
}
Tuy nhiên: có những trường hợp ai đó sẽ, vì một số lý do, có đăng ký Apple Music nhưng không tải xuống ứng dụng Apple Music trên thiết bị của họ. Nếu người dùng có đăng ký nhưng không phải thiết bị, về cơ bản tôi muốn xử lý trường hợp đó như thể họ hoàn toàn không có đăng ký, tức là chúng tôi không thể phát nhạc qua Apple Music.
Vì vậy, tôi đi tìm cách để thêm một kiểm tra xem Apple Music có trên thiết bị của người dùng không. Tôi tìm thấy câu trả lời này: Kiểm tra xem một ứng dụng được cài đặt bằng Swift kết hợp với tài nguyên này cho việc tìm kiếm chương trình url của Apple Music và kết luận tôi có thể kiểm tra nếu người dùng có cả một thuê bao của Apple Âm nhạc và các ứng dụng của Apple Âm nhạc được cài đặt trên thiết bị của họ thông qua:
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")
}
}
Vấn đề là, ngay cả sau khi xóa Apple Music khỏi thiết bị của tôi, trường hợp đầu tiên, tức là trường hợp in user has Apple Music subscription and has the apple music app installed
vẫn đang được gọi. Tôi tin rằng tôi có sơ đồ url chính xác bởi vì khi thay đổi "music://"
thành "musi://"
trường hợp thứ hai, tức là trường hợp in user does not have subscription or doesn't have apple music installed
đang được gọi.
Khi cố gắng mở URL(string: "music://")
bằng Apple Music đã bị xóa qua UIApplication.shared.open(URL(string: "music://")!)
, tôi gặp phải cảnh báo sau:
Vậy tại sao thiết bị nói rằng tôi có thể mở URL(string: "music://")
ngay cả sau khi Apple Music bị xóa? Là URL
khả năng được mở, nhưng kết quả chỉ đơn giản là sự trình bày của cảnh báo trên? Đây có phải là cách chính xác để xác nhận rằng người dùng đã cài đặt Apple Music trên thiết bị của họ không? Thậm chí có cách nào để xác nhận người dùng đã cài đặt Apple Music trên thiết bị của họ không? Nếu Apple cung cấp cho người dùng tùy chọn xóa ứng dụng Apple Music, họ cũng nên cung cấp cho nhà phát triển khả năng kiểm tra xem ứng dụng đã được cài đặt chưa.
URL(string: "music://trackId=1377813289")!
, URL(string: "music://track=1377813289")
, URL(string: "music://artist=562555")!
, URL(string: "music://artistId=562555")!
. Cách duy nhất tôi có thể liên kết sâu là thông qua một cái gì đó như URL(string: "https://music.apple.com/us/artist/562555")!
, nhưng điều này rõ ràng không giúp ích gì vì đây là HTTP.
UIApplication.shared.canOpenURL(URL(string: "music://")!)
luôn quay trở lại true
, ngay cả khi ứng dụng Apple Music bị xóa. Tôi cần nó để trở lại false
khi ứng dụng bị xóa. Làm trắng sơ đồ url sẽ không khắc phục vấn đề này (tôi đã thử).
URL(string: "music://trackID=3214534")
. Có thể lược đồ url rõ ràng này sẽ được xử lý theo cách thông thường, nhưng không kích hoạtapp restore
cảnh báo.