最近使用融云SDK,需要向融云服務(wù)器請求一個token參數(shù)
參考融云官方文檔:http://www.rongcloud.cn/docs/server.html
獲取 Token 方法
方法名:/user/getToken
簽名方法:請參考 通用 API 接口簽名規(guī)則
URL:http://api.cn.ronghub.com/user/getToken.[format]
[format] 表示返回格式功舀,可以為 json 或 xml才写,注意不要帶 [ ]集索。
HTTP 方法:POST
上傳參數(shù)(即parameters)
參數(shù)name可以設(shè)為與userId一樣
請求頭(headers)
Signature (數(shù)據(jù)簽名)計算方法:將系統(tǒng)分配的 App Secret懈凹、Nonce (隨機數(shù))、Timestamp (時間戳)三個字符串按先后順序拼接成一個字符串并進行 SHA1 哈希計算米母。如果調(diào)用的數(shù)據(jù)簽名驗證失敗术健,接口調(diào)用會返回 HTTP 狀態(tài)碼 401劣像。
返回值
token是我們的最終需要的參數(shù)
以上是具體的參數(shù)結(jié)構(gòu),下面使用Swift語言請求我們需要的參數(shù)token
###寫下如下方法(調(diào)用時傳入一個useId的字符串)
func requestToken1(userID:String) -> Void {
let dicUser = ["userId":userID,
"name":userID,
"portraitUrl":"http://img3.duitang.com/uploads/item/201508/30/20150830083023_N3rTL.png"
] //請求token的用戶信息
let urlStr = "https://api.cn.ronghub.com/user/getToken.json" //網(wǎng)址接口
let appKey = "3argexb6re94e"
let appSecret = "ajiqI7yE0lB7kZ"
let nonce = "\(arc4random())" //生成隨機數(shù)
let timestamp = "\(NSDate().timeIntervalSince1970)"http://時間戳
var sha1Value = appSecret + nonce + timestamp
sha1Value = sha1Value.sha1()//數(shù)據(jù)簽名,sha1是一個加密的方法
let headers = [ //照著文檔要求寫的Http 請求的 4個head
"App-key":appKey
,"Nonce":nonce
,"Timestamp":timestamp
,"Signature":sha1Value
]
Alamofire.request(urlStr, method: .post, parameters: dicUser , encoding: URLEncoding.default, headers: headers).responseJSON { (response) in
print(response)
if let dic = response.result.value as? NSDictionary{
let code = dic.value(forKey: "code") as! NSNumber
if code.stringValue == "200" {
print(dic.value(forKey: "token"))
}
}
}
}
下面是sha1的方法,創(chuàng)建NSString的category,并在橋接文件中引用
.h文件
#import <Foundation/Foundation.h>
@interface NSString (SHA1)
- (NSString *)sha1;
@end
.m文件
#import "NSString+SHA1.h"
#import <CommonCrypto/CommonCrypto.h>
typedef unsigned char *(*MessageDigestFuncPtr)(const void *data, CC_LONG len, unsigned char *md);
static NSString *_getMessageDigest(NSString *string, MessageDigestFuncPtr fp, NSUInteger length) {
const char *cString = [string UTF8String];
unsigned char *digest = malloc(sizeof(unsigned char) * length);
fp(cString, (CC_LONG)strlen(cString), digest);
NSMutableString *hash = [NSMutableString stringWithCapacity:length * 2];
for (int i = 0; i < length; ++i) {
[hash appendFormat:@"%02x", digest[i]];
}
free(digest);
return [hash lowercaseString];
}
@implementation NSString (SHA1)
- (NSString *)sha1 {
return _getMessageDigest(self, CC_SHA1, CC_SHA1_DIGEST_LENGTH);
}
@end