美文网首页
Swift3.0使用Alamofire获取融云SDK的token

Swift3.0使用Alamofire获取融云SDK的token

作者: 呼哮山庄 | 来源:发表于2016-10-31 19:57 被阅读558次

最近使用融云SDK,需要向融云服务器请求一个token参数
参考融云官方文档:http://www.rongcloud.cn/docs/server.html

获取 Token 方法
方法名:/user/getToken
签名方法:请参考 通用 API 接口签名规则
URL:http://api.cn.ronghub.com/user/getToken.[format]
[format] 表示返回格式,可以为 json 或 xml,注意不要带 [ ]。
HTTP 方法:POST

上传参数(即parameters)

上传参数
参数name可以设为与userId一样

请求头(headers)

请求头
Signature (数据签名)计算方法:将系统分配的 App Secret、Nonce (随机数)、Timestamp (时间戳)三个字符串按先后顺序拼接成一个字符串并进行 SHA1 哈希计算。如果调用的数据签名验证失败,接口调用会返回 HTTP 状态码 401。

返回值

返回值
 token是我们的最终需要的参数

以上是具体的参数结构,下面使用Swift语言请求我们需要的参数token

###写下如下方法(调用时传入一个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" //网址接口
    let appKey = "3argexb6re94e"
    let appSecret = "ajiqI7yE0lB7kZ"
    let nonce = "\(arc4random())"   //生成随机数
    let timestamp = "\(NSDate().timeIntervalSince1970)"//时间戳
    var sha1Value = appSecret + nonce + timestamp
    sha1Value = sha1Value.sha1()//数据签名,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的方法,创建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

参考文献http://www.jianshu.com/p/93338a645eba

相关文章

  • Swift3.0使用Alamofire获取融云SDK的token

    最近使用融云SDK,需要向融云服务器请求一个token参数参考融云官方文档:http://www.rongclou...

  • NSURLSession的简单使用

    目的:利用NSURLSession获取token.(NSURLConnection被弃用)融云获取token: s...

  • php融云聊天室集成

    一、服务端 获取token * 模拟post进行url请求 获取融云token * @param string...

  • 融云直播聊天室

    App与SDK的逻辑关系: 1.客户端初始化SDK 2.客户端向服务器获取token 3.服务器向融云服务器获取t...

  • iOS: 融云SDK/客户端获取token

    根据融云官方文档的服务器获取token的方法,自己也可以从客户端获取token玩一玩,但不推荐.参考融云sever...

  • Alamofire

    Swift3.0 Alamofire 多张图片上传【实践】使用“Alamofire+HandyJSON+结构体+泛...

  • 融云 Flutter IM SDK 解析

    融云 Flutter IM SDK 解析 最近准备使用融云的 Flutter SDK,所以顺便记录一下。 融云 F...

  • 融云使用之获取Token值

    先看一下官方给出的API签名规则 然后是签名请求参数准备,新建一个MSTool类,并导入头文件#import

  • iOS开发之融云IM集成

    首先去融云开发者注册一波账号,获取AppKey : 然后拉取融云SDK: 然后pod install,会发现SDK...

  • 2017--融云---获取token

    很多人在用融云做即时通信的时候,遇到大大小小很多坑,这里为大家解决第一个坑! 获取融云的token,一般都是后台开...

网友评论

      本文标题:Swift3.0使用Alamofire获取融云SDK的token

      本文链接:https://www.haomeiwen.com/subject/qzpputtx.html