融云在移动端不提供注册, 说是不安全等等原因, 需要在服务器端注册, 然后返回给客户端,但是我们又没有服务器, 因此我们可以用手机模拟服务器发送请求, 这样我们就可以自己注册和登录, 做一个聊天的小应用了.
按照官方文档一步一步来就可以了
本来是在网上找的代码, 麻蛋, 总是401错误,401错误是请求成功了但是参数有问题, 很多代码都写得有问题, 定义的变量不用,该有的变量没写,算了,不吐槽了.上代码
func getToken() {
// 申请时必要的参数
let parameters = [
"userId": "003",
"name": "003",
"portraitUri": ""
]
// 请求头(时间,随机数,加密)
let Timestamp = String(format: "%.0f",NSDate().timeIntervalSince1970)
let Nonce: String = String(arc4random())
var sha1 = AppKey + Nonce + Timestamp
// sha1()是写的一个分类里面的一个方法
sha1 = (sha1 as NSString).sha1()
// 网址
let urlstr = "https://api.cn.rong.io/user/getToken.json"
// 封装的AFN, 你也可以直接用AFN
let manage = NetworkTools.shareInstance
// 键值对应, 前两个在融云注册应用时,官网获取的应用信息
// 我在上面定义过了, 此处没写
manage.requestSerializer.setValue(AppKey, forHTTPHeaderField: "App-Key")
manage.requestSerializer.setValue(AppSecret, forHTTPHeaderField: "appSecret")
// 其他的几个请求头
manage.requestSerializer.setValue(Nonce, forHTTPHeaderField: "Nonce")
manage.requestSerializer.setValue(Timestamp, forHTTPHeaderField: "Timestamp")
manage.requestSerializer.setValue(sha1, forHTTPHeaderField: "Signature")
manage.requestSerializer.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")
// POST发送请求
manage.POST(urlstr, parameters: parameters, success: { (request, AnyObject) in
// 这里可以打印出具体信息
print(AnyObject)
}) { (request, NSError) in
print(NSError)
}
}
OC版加密算法:
新建NSString分类, 命名SHA1
然后NSString+SHA1.h里面
#import <Foundation/Foundation.h>
@interface NSString (SHA1)
- (NSString *)sha1;
@end
然后NSString+SHA1.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
最后,在swift项目里面桥接OC代码就可以了, 桥接不懂得自己百度下, 如果你已经做了相关工作, 有Bridging-Header文件, 在文件里面直接导入头文件即可.
时间: 2024-09-27 03:49:34