iOS融云获取Token问题,献给iOS融云新手!
2016-01-22 17:16
453 查看
#import "ViewController.h"
#import "AFHTTPRequestOperationManager.h"
#import <CommonCrypto/CommonDigest.h>
#define AppKey @"你应用的Appkey"
#define AppSecret @"你应用的Appsecret"
@implementation ViewController
- (void)viewDidLoad {
[superviewDidLoad];
AFHTTPRequestOperationManager *nManage = [AFHTTPRequestOperationManagermanager];
nManage.responseSerializer = [[AFHTTPResponseSerializeralloc]init];
// 随机数,无长度限制
NSString *Nonce = [NSStringstringWithFormat:@"%d",arc4random()];
// 以1970/01/01 GMT为基准时间,返回实例保存的时间与1970/01/01 GMT的时间间隔
NSDate *dateObc = [NSDatedate];
NSString *Timestamp = [NSStringstringWithFormat:@"%d",(int)[dateObctimeIntervalSince1970]];
// 将系统分配的 AppSecret、Nonce (随机数)、Timestamp (时间戳)三个字符串按先后顺序拼接成一个字符串并进行 SHA1哈希计算
NSString *Signature = [selfsha1:[NSStringstringWithFormat:@"%@%@%@",AppSecret,Nonce,Timestamp]];
// 每次请求 API接口时,均需要提供 4个 HTTP Request Header
[nManage.requestSerializersetValue:AppKeyforHTTPHeaderField:@"App-Key"];
[nManage.requestSerializersetValue:NonceforHTTPHeaderField:@"Nonce"];
[nManage.requestSerializersetValue:TimestampforHTTPHeaderField:@"Timestamp"];
[nManage.requestSerializersetValue:SignatureforHTTPHeaderField:@"Signature"];
// 表单参数
NSMutableDictionary *parameter = [NSMutableDictionarydictionary];
parameter[@"userId"] =@"10101011";
parameter[@"name"] =@"张三";
parameter[@"portraitUri"] =@"https://www.baidu.com/img/baidu_jgylogo3.gif";
[nManage POST:@"https://api.cn.rong.io/user/getToken.json"parameters:parametersuccess:^(AFHTTPRequestOperation *operation,id responseObject) {
NSDictionary *dic = [NSJSONSerializationJSONObjectWithData:responseObjectoptions:0error:nil];
NSLog(@"-----UserInfomation---%@",dic);
} failure:^(AFHTTPRequestOperation *operation,NSError *error) {
NSLog(@"-----%@---",error);
}];
}
/*使用下面方法需要导入 CommonCrypto/CommonDigest.h*/
// 哈希计算
- (NSString *) sha1:(NSString *)input
{
NSData *data = [inputdataUsingEncoding:NSUTF8StringEncoding];
uint8_t digest[CC_SHA1_DIGEST_LENGTH];
CC_SHA1(data.bytes, (unsignedint)data.length, digest);
NSMutableString *output = [NSMutableStringstringWithCapacity:CC_SHA1_DIGEST_LENGTH *2];
for(int i=0; i<CC_SHA1_DIGEST_LENGTH; i++) {
[output appendFormat:@"%02x", digest[i]];
}
return output;
}
@end
#import "AFHTTPRequestOperationManager.h"
#import <CommonCrypto/CommonDigest.h>
#define AppKey @"你应用的Appkey"
#define AppSecret @"你应用的Appsecret"
@implementation ViewController
- (void)viewDidLoad {
[superviewDidLoad];
AFHTTPRequestOperationManager *nManage = [AFHTTPRequestOperationManagermanager];
nManage.responseSerializer = [[AFHTTPResponseSerializeralloc]init];
// 随机数,无长度限制
NSString *Nonce = [NSStringstringWithFormat:@"%d",arc4random()];
// 以1970/01/01 GMT为基准时间,返回实例保存的时间与1970/01/01 GMT的时间间隔
NSDate *dateObc = [NSDatedate];
NSString *Timestamp = [NSStringstringWithFormat:@"%d",(int)[dateObctimeIntervalSince1970]];
// 将系统分配的 AppSecret、Nonce (随机数)、Timestamp (时间戳)三个字符串按先后顺序拼接成一个字符串并进行 SHA1哈希计算
NSString *Signature = [selfsha1:[NSStringstringWithFormat:@"%@%@%@",AppSecret,Nonce,Timestamp]];
// 每次请求 API接口时,均需要提供 4个 HTTP Request Header
[nManage.requestSerializersetValue:AppKeyforHTTPHeaderField:@"App-Key"];
[nManage.requestSerializersetValue:NonceforHTTPHeaderField:@"Nonce"];
[nManage.requestSerializersetValue:TimestampforHTTPHeaderField:@"Timestamp"];
[nManage.requestSerializersetValue:SignatureforHTTPHeaderField:@"Signature"];
// 表单参数
NSMutableDictionary *parameter = [NSMutableDictionarydictionary];
parameter[@"userId"] =@"10101011";
parameter[@"name"] =@"张三";
parameter[@"portraitUri"] =@"https://www.baidu.com/img/baidu_jgylogo3.gif";
[nManage POST:@"https://api.cn.rong.io/user/getToken.json"parameters:parametersuccess:^(AFHTTPRequestOperation *operation,id responseObject) {
NSDictionary *dic = [NSJSONSerializationJSONObjectWithData:responseObjectoptions:0error:nil];
NSLog(@"-----UserInfomation---%@",dic);
} failure:^(AFHTTPRequestOperation *operation,NSError *error) {
NSLog(@"-----%@---",error);
}];
}
/*使用下面方法需要导入 CommonCrypto/CommonDigest.h*/
// 哈希计算
- (NSString *) sha1:(NSString *)input
{
NSData *data = [inputdataUsingEncoding:NSUTF8StringEncoding];
uint8_t digest[CC_SHA1_DIGEST_LENGTH];
CC_SHA1(data.bytes, (unsignedint)data.length, digest);
NSMutableString *output = [NSMutableStringstringWithCapacity:CC_SHA1_DIGEST_LENGTH *2];
for(int i=0; i<CC_SHA1_DIGEST_LENGTH; i++) {
[output appendFormat:@"%02x", digest[i]];
}
return output;
}
@end
相关文章推荐
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 不可修补的 iOS 漏洞可能导致 iPhone 4s 到 iPhone X 永久越狱
- iOS 12.4 系统遭黑客破解,漏洞危及数百万用户
- 每日安全资讯:NSO,一家专业入侵 iPhone 的神秘公司
- [转][源代码]Comex公布JailbreakMe 3.0源代码
- 讲解iOS开发中基本的定位功能实现
- js判断客户端是iOS还是Android等移动终端的方法
- IOS开发环境windows化攻略
- 浅析iOS应用开发中线程间的通信与线程安全问题
- 检测iOS设备是否越狱的方法
- .net平台推送ios消息的实现方法
- 探讨Android与iOS,我们将何去何从?
- Android、iOS和Windows Phone中的推送技术详解
- IOS 改变键盘颜色代码
- 举例详解iOS开发过程中的沙盒机制与文件
- Android和IOS的浏览器中检测是否安装某个客户端的方法
- 分享一个iOS下实现基本绘画板功能的简单方法
- javascript实现阻止iOS APP中的链接打开Safari浏览器