2016-08-18 44 views
1

我想做一个Unsplash照片客户端,它需要我使用网站的API。根据文档,为了访问照片相关信息(如pageURL,imagesURL等)oAuth2.0是必需的。它声明我必须做以下事情:我应该如何在swift中获得OAuth2.0访问令牌?

  1. 指示用户带有一些查询参数到https://unsplash.com/oauth/authorize
  2. 如果用户接受该请求,则用户将被重定向到redirect_ui(的参数之一),与在代码查询参数
  3. 授权码使POST请求https://unsplash.com/oauth/token一些参数。

这是我试过的代码来实现这一点:

ViewController.swift

class ViewController: UIViewController { 

override func viewDidLoad() { 
    super.viewDidLoad() 
    authenticator() 
    // Do any additional setup after loading the view, typically from a nib. 
} 


func authenticator(){ 

    Alamofire.request(.GET, "https://unsplash.com/oauth/authorize", parameters: [ 
    "client_id": "2902affb00634248f77b3c5c7a4ba4232fa36e3cbaad826b223a27f3df57e642" 
    , "redirect_uri": "Sample//:" , 
     "response_type" : "code" , 
     "scope":"" ]).responseJSON{ response in 
print("original URL request : \(response.request) ") 
print("URL response : \(response.response) ") 
    } 


    Alamofire.request(.POST, "https://unsplash.com/oauth/authorize", parameters: [ 
     "client_id" : "2902affb00634248f77b3c5c7a4ba4232fa36e3cbaad826b223a27f3df57e642", 
     "client_secret":"6e85c0e5bcda025f0553e1343dcbdd8a892b0db1cc3a653055d84ce44c217bb9", 
     "redirect_uri" : "Sample//:" , 
     "code" : "c15781809f4ee781e6019b958a2702be0dab61e89df96863693dbd7d48bacd53" , 
     "grant_type":"authorization_code" ]) 
     .responseJSON { response in 
      print(response.request) // original URL request 
      print(response.response) // URL response 
      print(response.data)  // server data 
      print(response.result) // result of response serialization 

      if let JSON = response.result.value { 
       print("JSON: \(JSON)") 
     } 
    } 
} 

但是,这是我所得到的:

Optional(<NSMutableURLRequest: 0x7f9cf959f700> { URL:  https://unsplash.com/oauth/authorize }) 
    Optional(<NSHTTPURLResponse: 0x7f9cf941f920> { URL: https://unsplash.com/oauth/authorize } { status code: 422, headers { 
"Accept-Ranges" = bytes; 
Connection = "keep-alive"; 
"Content-Length" = 8440; 
"Content-Type" = "text/html; charset=utf-8"; 
Date = "Thu, 18 Aug 2016 15:24:30 GMT"; 
Server = Cowboy; 
"Strict-Transport-Security" = "max-age=31536000"; 
Via = "1.1 vegur, 1.1 varnish"; 
"X-Cache" = MISS; 
"X-Cache-Hits" = 0; 
"X-Ratelimit-Limit" = 100; 
"X-Ratelimit-Remaining" = 94; 
"X-Request-Id" = "f00ae2f9-6369-4526-9b28-283c294e2a30"; 
"X-Runtime" = "0.012134"; 
"X-Served-By" = "cache-sin6920-SIN"; 
"X-Timer" = "S1471533870.429494,VS0,VE550"; 
} }) 
    Optional(<3c21444f 43545950 45206874 6d6c3e0a 3c68746d 6c3e0a3c 68656164 3e0a2020 ....2e 636f6d2f 616e616c 79746963 732e6a73 272c2767 6127293b 0a0a2020 20206761 28276372 65617465 272c2027 55412d33 36303439 3637302d 34272c20 27617574 6f27293b 0a202020 20676128 2773656e 64272c20 27706167 65766965 7727293b 0a202020 20676128 2773656e 64272c20 27657665 6e74272c 20276163 74696f6e 272c2027 34323227 293b0a20 203c2f73 63726970 743e0a0a 3c2f626f 64793e0a 3c2f6874 6d6c3e0a>) 
    FAILURE 

如何我应解决这个错误?

+0

我仍然试图找出这一点。没有成功。 – 209135

回答

2

你知道了吗?如果没有,我会给你一个提示。按照我的步骤,您将从Unsplash返回Access-Token获得成功。

首先,我们将找出如何使用这个请求https://unsplash.com/oauth/authorize。有了这个请求,你需要使用UIWebView,因为这会返回一个HTML页面。

用UIWebView试试这个https://unsplash.com/oauth/authorize?client_id=Your_App_ID&redirect_uri=urn%3Aietf%3Awg%3Aoauth%3A2.0%3Aoob&response_type=code&scope=public+read_user+write_user+read_photos+write_photos+write_likes+read_collections+write_collections

利用UIWebView的你会得到一个代码,这个请求后返回这样https://unsplash.com/oauth/authorize/f2ad36deb30b37a2614898e366b84e7c0f68fccd0358565cfbdc2637e*****

代码后/授权/是你需要与要求https://unsplash.com/oauth/token填写您的code参数代码 - 现在你可以使用Alamofire获得你的令牌。

只是给你提问,如果你还有问题

+0

我放弃了Unsplash API并开始使用pixabay API,因为我在这个问题上浪费了很多时间。尽管谢谢你的回答。一旦我遇到了其他问题,我将实施您的解决方案。 – 209135