I am trying to login to Spotify using the Web API since I don't need a session object. In my authorize method, I need to pass in the redirect url, but the way that the iOS redirect url is formatted is not accepted in a .GET request.
func authorize() {
// create the url
let url = "https://accounts.spotify.com/authorize"
// parameters
let parameters = ["client_id" : kClientID,
"response_type" : "code",
"redirect_uri" : "spotify-discover-login://callback",
"state" : kState,
"scope" : kScopes]
// response code
var responseCode = 401
Alamofire.request(.GET, url, parameters: parameters, headers: nil)
.responseString{response in
print(response)
switch response.result {
case .Success:
if let response = response.response {
responseCode = response.statusCode
}
case .Failure:
print("fail")
return
}
switch responseCode {
case 200:
print("200")
case 202:
print("@ACCEPTED")
case 400:
print("@BAD REQUEST")
case 401:
print("@AUTH FAIL")
case 403:
print("@FORBIDDEN")
case 1004:
print("@COULD NOT CONNECT")
default: break
}
}
}
UPDATE:
This is the error that Xcode gives me:
FAILURE: Error Domain=NSURLErrorDomain Code=-1002 "unsupported URL"
UserInfo={NSUnderlyingError=0x7fc89b4677a0 {Error Domain=kCFErrorDomainCFNetwork Code=-1002 "(null)"}, NSErrorFailingURLStringKey=spotify-discover-login://callback/?code=AQDKy5g8QOVodDd0kTEmqG-MXKdPmKiPzzSUSfZAY_Nh0J_SW8LYl7s583Pe6mu1kJcHA6Hyudpwhu-FkBXagvFE_Vh8ZVXsSP8sMZvJTikPkdJeV57vgJaL9f6K9QMLfGbIb1XuhqadLP30SGejyDoLGgVoLVtrW_ryWK4KQRwvQKNiitAW9kBDYry6A70i6R7aosFKOQrhswYxhH3Lre0ieBnCt0HrLozp3qQvnk36NKY2Ur2OdI92JOaf4Gk3UmLbrIyjcvUzdeK21tk-bkog9em0x3jJBKgeSAmiFz05ioehlboD9D79uvKPFfnA3hkvfBNFN5dvegiBcRfik7mNebckD2WRABqPyid5Xw8zt092sheCwhuxQDh13-LxGC4WfTlA5ydNrZlwQA5_5JcMQvgZZOA&state=random-string-state, NSErrorFailingURLKey=spotify-discover-login://callback/?code=AQDKy5g8QOVodDd0kTEmqG-MXKdPmKiPzzSUSfZAY_Nh0J_SW8LYl7s583Pe6mu1kJcHA6Hyudpwhu-FkBXagvFE_Vh8ZVXsSP8sMZvJTikPkdJeV57vgJaL9f6K9QMLfGbIb1XuhqadLP30SGejyDoLGgVoLVtrW_ryWK4KQRwvQKNiitAW9kBDYry6A70i6R7aosFKOQrhswYxhH3Lre0ieBnCt0HrLozp3qQvnk36NKY2Ur2OdI92JOaf4Gk3UmLbrIyjcvUzdeK21tk-bkog9em0x3jJBKgeSAmiFz05ioehlboD9D79uvKPFfnA3hkvfBNFN5dvegiBcRfik7mNebckD2WRABqPyid5Xw8zt092sheCwhuxQDh13-LxGC4WfTlA5ydNrZlwQA5_5JcMQvgZZOA&state=random-string-state, NSLocalizedDescription=unsupported URL}
You can read API documents here for iOS developer: https://developer.spotify.com/technologies/spotify-ios-sdk/tutorial/
Or here for Web API developer: https://developer.spotify.com/web-api/get-users-profile/
This happened also when you dont make this in your info.plist file:
Steps to solve this issue:
info.plist
fileNSAppTransportSecurity
as aDictionary
.NSAllowsArbitraryLoads
asBoolean
and set its value toYES
Finally you must have:
The
NSURLErrorDomain
code -1002 points to anNSURLErrorUnsupportedURL
error. According to Apple, this error means:According to NSHipster, this error means:
So your URL is properly formed, but there's no protocol handler that knows what to do with the "spotify-discover-login" protocol.
But of course that's your custom URL scheme. Make sure you've properly registered your custom URL scheme in your info.plist and implemented
application:openURL:options:
. See this tutorial.As a side note, your custom URL scheme name is quite generic. Another app or the Spotify app itself might use the exact same scheme either now or in the future, which could create a headache for you in debugging. Make sure to make the scheme unique, most likely including the name of your app or your company in the scheme, such as "PoKoBros-spotify-discover-login".