1
A
答えて
3
1)ちょうどあなたがブリッジのObjective-Cヘッダに#import <CommonCrypto/CommonHMAC.h>
を追加してください。
import Foundation
extension Data {
func hexEncodedString() -> String {
return map { String(format: "%02hhx", $0) }.joined()
}
}
func digestHMac(signature:String, secret: String) -> String! {
let secretData : Data = secret.data(using: .utf8)!
let signatureData : Data = signature.data(using: .utf8)!
let digest = UnsafeMutablePointer<UInt8>.allocate(capacity:Int(CC_SHA1_DIGEST_LENGTH))
var hmacContext = CCHmacContext()
CCHmacInit(&hmacContext, CCHmacAlgorithm(kCCHmacAlgSHA1), [UInt8](secretData), secretData.count)
CCHmacUpdate(&hmacContext, [UInt8](signatureData), [UInt8](signatureData).count)
CCHmacFinal(&hmacContext, digest)
let cryptData = Data(bytes: digest, count: Int(CC_SHA1_DIGEST_LENGTH))
return cryptData.hexEncodedString()
}
//Your 'API Application Identifier'
let applicaitonID = ""
//Your 'Authentication Key'
let authKey = ""
//Your 'Authentication Secret'
let authSecret = ""
//Your Quickblox API Endpoint
let apiEndpoint = "https://api.quickblox.com/session.json"
//Unix Timestamp It shouldn't be differ from time provided by NTP more than 60 minutes. We suggest you synchronize time on your devices with NTP service.
let timestamp = Int(Date().timeIntervalSince1970)
//Unique Random Value. Requests with the same timestamp and same value for nonce parameter can not be send twice.
let nonce = arc4random_uniform(1000000) + 1;
var payload = [
"application_id" : applicaitonID,
"auth_key": authKey,
"nonce" : String(nonce),
"timestamp" : String(timestamp)
]
//Request body is formed as the sorted (sorting alphabetically, as symbols, not as bytes) by increase the string array 'parameter=value', separated with the symbol "&".
let sortedKeys = Array(payload.keys).sorted(by: <)
var parametersString = ""
for key in sortedKeys {
parametersString = parametersString + key + "=" + payload[key]! + "&"
}
parametersString = parametersString.substring(to: parametersString.index(before: parametersString.endIndex))
let parameters = parametersString.addingPercentEncoding(withAllowedCharacters: .urlHostAllowed)!
let hmac = digestHMac(signature: parameters, secret: authSecret)
payload["signature"] = hmac
//Session Request
var request:NSMutableURLRequest = NSMutableURLRequest(url: URL(string: apiEndpoint)!)
request.httpMethod = "POST"
request.addValue("application/json", forHTTPHeaderField:"Content-Type")
request.httpBody = try! JSONSerialization.data(withJSONObject: payload, options: [])
print(payload)
let task = URLSession.shared.dataTask(with: request as URLRequest) { (data, response, error) in
let json = try! JSONSerialization.jsonObject(with: data!)
/* Response
{
session = {
"_id" = 589c94c0a28f9a15d7000037;
"application_id" = 39854;
"created_at" = "2017-02-09T16:11:44Z";
"device_id" = 0;
id = 61804;
nonce = 243190;
token = 419e64c861594b63b558b259f8b6e4fd4c009bae;
ts = 1486656703;
"updated_at" = "2017-02-09T16:11:44Z";
"user_id" = 0;
};
}
*/
}
task.resume()
sleep(30)
関連する問題
- 1. Quickbloxでテーブル間のリレーションシップを作成する方法
- 2. QuickBloxセッションの作成:Railsアプリケーションでの予期しない署名
- 3. Quickbloxでプライベートチャットでダイアログを作成する
- 4. apiを使用してquickbloxアプリケーションを作成する方法は?
- 5. SwiftでPDFを作成する方法
- 6. swiftでプラグインを作成する方法
- 7. Swiftでインターフェイスを作成する方法
- 8. Swiftでカスタムキーボードを作成する方法
- 9. Swiftでカスタムアラートビューを作成する方法
- 10. quickbloxユーザー作成の制限
- 11. アンドロイドスタジオでquickbloxをインテグレートする方法は?
- 12. ブラウザでセッションを作成する方法をクリアするには?
- 13. SWIFT 3.0でのシングルトンクラスの作成方法
- 14. セキュリティコンテキストでプログラムでセッションを認証して作成する方法
- 15. PHPでセッションを使用してショッピングカートを作成する方法
- 16. javascriptでセッションを作成し、コントローラmvcにアクセスする方法
- 17. 最も安全な方法は、PHPでセッションを作成する
- 18. laravel 5.3でセッションIDを作成する方法は?
- 19. ログインページのhtmlでセッションを作成する方法
- 20. iphoneアプリでセッションを作成して管理する方法は?
- 21. Amadeus Webサービスでセッションを作成する方法
- 22. Laravelでセッション永続性を作成する方法は?
- 23. Springサービスクラスでセッションを作成する方法は?
- 24. SwiftのUIbezierPathでユニバーサルラウンドドロー(lineDashPatternを使用)を作成する方法
- 25. SwiftでセッションIDを取得する方法
- 26. devise_token_authセッションのskip_before_actionの作成方法#create
- 27. Quickbloxのデフォルトユーザーをブロックする方法は?
- 28. SwiftでこのJSONオブジェクトを作成する方法
- 29. Swift with Cocoa(Mac)でPDFを作成する方法
- 30. SwiftでサークルUIViewを作成する方法