質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
HTTP

HTTP(Hypertext Transfer Protocol)とはweb上でHTML等のコンテンツを交換するために使われるアプリケーション層の通信プロトコルです。

HTTPヘッダー

Hypertext Transfer Protocol(HTTP)の中のHTTPヘッダフィールドはHTTPの要求やレスポンスの機能しているパラメーターが含まれます。その要求もしくはレスポンスライン(メッセージの最初の一行)でメッセージヘッダを作ります。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

解決済

2回答

2755閲覧

AppleMusicAPIにてstorefrontやuserlibrary取得時にAlamofireによるリクエストが上手くいかない

keroto

総合スコア12

HTTP

HTTP(Hypertext Transfer Protocol)とはweb上でHTML等のコンテンツを交換するために使われるアプリケーション層の通信プロトコルです。

HTTPヘッダー

Hypertext Transfer Protocol(HTTP)の中のHTTPヘッダフィールドはHTTPの要求やレスポンスの機能しているパラメーターが含まれます。その要求もしくはレスポンスライン(メッセージの最初の一行)でメッセージヘッダを作ります。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

0クリップ

投稿2019/08/12 13:57

編集2019/08/15 12:37

前提・実現したいこと

現在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です)
長くなってしまいましたが、助言をいただけると幸いです...!

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

Apple Musicの着信音も良いですが、私はGoogleで着信音をダウンロードすることを好みます。 なぜなら、ここの MP3 サウンドは非常に優れているにもかかわらず、Baixar toque celular grátis mp3 では iPhone や Apple の着信音として曲を完全に無料でダウンロードできるからです。

投稿2024/03/18 09:25

toquecelular

総合スコア6

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

自己解決

"Authorization"の"Bearer"と(developerToken)の間に空白を入れたらできました

投稿2019/08/16 03:42

keroto

総合スコア12

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問