私の都市の一部のショップへの参照を含むアプリケーションをビルドしています。 ここでは、各ショップの詳細ビューにショップのアカウントから最後の3つまたは5つのツイートが入ったテーブルを挿入します。Swift:Twitterアプリケーションのみの認証
私はサードパーティのソリューションを使用しません。
私は、Restサービスを使用するために私のアプリケーションを認証する必要があることを理解しているので、私はそのアプリケーションを登録し、アクセストークンに "読み取り専用"オプションを要求しています。
レスポンスとして「認証エラー」が発生するたびに、Restサービスにアクセスすることができません。
Twitterのウェブサイト上のドキュメントはここにある: アプリケーションのみの認証のための3つの手順を説明しているhttps://developer.twitter.com/en/docs/basics/authentication/overview/application-only
:
- エンコードコンシューマキーと
- 秘密は、トークン ベアラを入手します
- ベアラトークンでAPIリクエストを認証する
- Access Twitter using Swift
- Twitter Friendship/create api asking for authentication in swift
- Parsing Twitter API Search Response in Swift with TwitterKit:
は、私はここで解決策を探しました http://rshankar.com/retrieve-list-of-twitter-followers-using-swift/
を、これは私の試みです:
1.私は、funcがbearerToken
func getBearerToken(completion:@escaping (_ bearerToken: String) -> Void) { var request = URLRequest(url: URL(string: authURL)!) request.httpMethod = "POST" request.addValue("Basic " + getBase64EncodeString(), forHTTPHeaderField: "Authorization") request.addValue("application/x-www-form-urlencoded;charset=UTF-8", forHTTPHeaderField:"Content-Type") let grantType = "grant_type=client_credentials" request.httpBody = grantType.data(using: String.Encoding.utf8, allowLossyConversion: true) URLSession.shared.dataTask(with: request, completionHandler: { (data: Data?, response:URLResponse?, error: NSError?) -> Void in do { if let results: NSDictionary = try JSONSerialization .jsonObject(with: data!, options: JSONSerialization.ReadingOptions.allowFragments ) as? NSDictionary { if let token = results["access_token"] as? String { completion(token) } else { print(results["errors"]!) } } } catch let error as NSError { print(error.localizedDescription) } } as! (Data?, URLResponse?, Error?) -> Void).resume() }
3を獲得し、最終的にAPI要求を認証するためにCONSUMER_KEYをエンコードし、
let consumerKey = "xxxxxxxxxxxxxxxx" let consumerSecret = "xxxxxxxxxxxxxxxx" let authUrl = "https://api.twitter.com/oauth2/token" func getBase64EncodeString() -> String { let consumerKeyRFC1738 = consumerKey.addingPercentEncoding(withAllowedCharacters: CharacterSet.urlQueryAllowed) let consumerSecretRFC1738 = consumerSecret.addingPercentEncoding(withAllowedCharacters: CharacterSet.urlQueryAllowed) let concatenateKeyAndSecret = consumerKeyRFC1738! + ":" + consumerSecretRFC1738! let secretAndKeyData = concatenateKeyAndSecret.data(using: String.Encoding.ascii, allowLossyConversion: true) let base64EncodeKeyAndSecret = secretAndKeyData?.base64EncodedString(options: NSData.Base64EncodingOptions()) return base64EncodeKeyAndSecret! }
2をconsumer_secretするFUNCを作成し、すべての最初のベアラトークン付き
012516410 getBearerTokenのFUNCでfunc getResponseForRequest(url:String) { var results:NSDictionary getBearerToken(completion: { (bearerToken) -> Void in var request = URLRequest(url: URL(string: url)!) request.httpMethod = "GET" let token = "Bearer " + bearerToken request.addValue(token, forHTTPHeaderField: "Authorization") URLSession.shared .dataTask(with: request, completionHandler: { (data: Data?, response:URLResponse?, error: NSError?) -> Void in self.processResult(data!, response: response!, error: error) } as! (Data?, URLResponse?, Error?) -> Void).resume() }) }
} as! (Data?, URLResponse?, Error?) -> Void).resume()
:現時点で
iは、メッセージ行でエラーが発生しています。
エラーメッセージがある:
スレッド1:EXC_BAD_INSTRUCTION(コード= EXC_I386_INVOP、サブコード= 0x0の)認証動作する場合、私は確認していないのでまで
。
誰かが私を助けることができますか?
こんにちは、あなたはこの問題を解決しましたか?私は同じ問題を抱えています。 – shilei365
いいえ、私はまだ解決策を探しています –
私はこの問題を解決し、 – shilei365