前提・実現したいこと
現在AppleMusicAPIを用いてユーザーのライブラリを取得しようとしているのですが、
実行すると以下のようなエラーが表示され、曲を表示することができません。
(AlamofireとSwiftyJSONを用いています)
発生している問題・エラーメッセージ
2019-08-12 22:21:11.164963+0900 MusicSample[53034:14792144] [core] "Error returned from daemon: Error Domain=com.apple.accounts Code=9 "(null)"" 2019-08-12 22:21:11.165213+0900 MusicSample[53034:14792144] SSAccountStore: Failed to fetch the backing accounts. error = Error Domain=com.apple.accounts Code=9 "(null)" 2019-08-12 22:21:11.167091+0900 MusicSample[53034:14792201] [core] "Error returned from daemon: Error Domain=com.apple.accounts Code=9 "(null)"" 2019-08-12 22:21:11.167195+0900 MusicSample[53034:14792201] SSAccountStore: Failed to fetch the backing accounts. error = Error Domain=com.apple.accounts Code=9 "(null)" 2019-08-12 22:21:11.171310+0900 MusicSample[53034:14792201] SSAccountStore: Unable to get the local account. error = Error Domain=SSErrorDomain Code=100 "Cannot connect to iTunes Store" UserInfo={NSLocalizedDescription=Cannot connect to iTunes Store}
該当のソースコード
//MusicViewController.swift func setUserData(limit:Int){ appleMusicAPI.fetchUserToken { self.appleMusicAPI.fetchStorefronts { self.appleMusicAPI.getUserLibrary(limit: limit, completion: { (data) in let group = DispatchGroup() self.songs = [Song]() for i in 0 ..< 50{ group.enter() self.song = Song() self.song?.title = data["data"][i]["attributes"]["name"].string self.song?.artist = data["data"][i]["attributes"]["artistName"].string self.songs?.append(self.song!) group.leave() } group.notify(queue: .main){ self.tableView.reloadData() } }) } } }
//AppleMusicAPI.swift class AppleMusicAPI{ private let developerToken = "****" var userToken:String? var storefrontId:String? func fetchUserToken(completion:@escaping (() -> Void)){ let serviceController = SKCloudServiceController() serviceController.requestUserToken(forDeveloperToken: developerToken) { (userToken, err) in guard err == nil else {return} if let userToken = userToken{ self.userToken = userToken } completion() } } func fetchStorefronts(compeltion:@escaping () -> Void){ let AuthHeader : [String:String] = ["Authorization":"Bearer(developerToken)","Music-User-Token":userToken!] Alamofire.request("https://api.music.apple.com/v1/me/storefront", method: .get, encoding: URLEncoding.default, headers: AuthHeader).responseJSON { (response) in guard let response = response.result.value else {return} let data = JSON(response) if let storefrontId = data["data"][0]["id"].string{ self.storefrontId = storefrontId } compeltion() } } func getUserLibrary(limit:Int,completion:@escaping (JSON) -> Void){ let AuthHeader : [String:String] = ["Authorization":"Bearer(developerToken)","Music-User-Token":userToken!] let parameters : Parameters = ["limit":limit] Alamofire.request("https://api.music.apple.com/v1/me/library/songs", method: .get, parameters: parameters, encoding: URLEncoding.queryString, headers:AuthHeader).responseJSON {responseData in guard let response = responseData.result.value else {return} let data = JSON(response) completion(data) } } }
試したこと
DeveloperTokenとUserTokenは取得できていることが確認されています。
class AppleMusicAPIのfunc fetchStorefrontsとfunc getUserLibraryにてAlamofireのresponseが取得できておらず
FAILURE: responseSerializationFailed(reason: Alamofire.AFError.ResponseSerializationFailureReason.inputDataNilOrZeroLength)
となってしまっています。
request自体がうまくできていないのかもしれない(Headerやparameterの設定の仕方など)とは思ったのですが、
どちらに問題があるか見当をつけられずにいます。
(iOS12.4・Xcode v10.2.1です)
長くなってしまいましたが、助言をいただけると幸いです...!
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。