經(jīng)歷了繁忙的項(xiàng)目期烘贴,終于有時(shí)間閑下來總結(jié)一下項(xiàng)目中即時(shí)通訊遇到的問題筷畦。
使用即時(shí)通訊的流程,在融云官方網(wǎng)站有詳細(xì)的介紹症杏,在這里不在詳細(xì)的介紹。這里收錄一些我在項(xiàng)目中遇到的問題瑞信。
1.系統(tǒng)依賴庫的添加厉颤,如果您使用的是Xcode 6.X版本,則需要將上面的動(dòng)態(tài)庫*.tbd的后綴改為*.dylib凡简。 如果您沒有使用IMKit的所有功能逼友,有些庫可能并非必須
AssetsLibrary.framework ? ? ??AudioToolbox.framework ? ??AVFoundation.framework ? ? ??CFNetwork.framework ? ? ?CoreAudio.framework ? ? ? ?CoreGraphics.framework ? ? ? ? ?CoreLocation.framework ? ? ??CoreMedia.framework ? ? ?CoreTelephony.framework ? ? ? ??CoreVideo.framework ? ? ? ??ImageIO.framework ? ? ? ??libc++.tbd ? ? ? ? ??libc++abi.tbd ? ? ? ?libsqlite3.tbd ? ? ? ??libstdc++.tbd ? ? ? ??libxml2.tbd ? ? ? ? ?libz.tbd ? ? ??MapKit.framework ? ? ? ?OpenGLES.framework ? ? ? ? ?QuartzCore.framework ? ? ??SystemConfiguration.framework ? ? ? ?UIKit.framework ? ? ??Photos.framework
2.設(shè)置plist支持http
3.利用請(qǐng)求從服務(wù)器端獲取token。
因?yàn)楂@取 Token 時(shí)需要提供 App Key 和 App Secret秤涩。如果在客戶端請(qǐng)求 Token帜乞,假如您的 App 代碼一旦被反編譯,則會(huì)導(dǎo)致您的 App Key和App Secret 泄露筐眷。所以黎烈,務(wù)必在您的服務(wù)器端獲取 Token。
AFHTTPRequestOperationManager*mgr = [AFHTTPRequestOperationManagermanager];
//服務(wù)器請(qǐng)求鏈接地址
NSString*urlstr =@"https://api.cn.rong.io/user/getToken.json";
//請(qǐng)求參數(shù)userID:用戶唯一標(biāo)識(shí)name:用戶名portraitUri:用戶頭像鏈接
NSDictionary*parm =@{@"userId":PHONE,
@"name":USERNAME,
@"portraitUri":USERImage
};
NSString* timestamp = [[NSStringalloc]initWithFormat:@"%ld",(long)[NSDatetimeIntervalSinceReferenceDate]];
NSString* nonce = [NSStringstringWithFormat:@"%d",arc4random()];
//創(chuàng)建應(yīng)用得到的appKey
NSString* appkey =RCAPPKey;
//簽名
NSString*Signature = [[NSStringstringWithFormat:@"%@%@%@",appkey,nonce,timestamp]base64EncodedString];
//以下是拼接請(qǐng)求內(nèi)容
[mgr.requestSerializersetValue:nonceforHTTPHeaderField:@"Nonce"];
[mgr.requestSerializersetValue:appkeyforHTTPHeaderField:@"App-Key"];
[mgr.requestSerializersetValue:SignatureforHTTPHeaderField:@"Signature"];
[mgr.requestSerializersetValue:timestampforHTTPHeaderField:@"Timestamp"];
[mgr.requestSerializersetValue:RCAPPSecretforHTTPHeaderField:@"appSecret"];
[mgr.requestSerializersetValue:@"application/x-www-form-urlencoded"forHTTPHeaderField:@"Content-Type"];
//開始請(qǐng)求
[mgrPOST:urlstrparameters:parmsuccess:^(AFHTTPRequestOperation*operation,idresponseObject) {
//這里你就能得到token啦~
NSLog(@"%@", responseObject);
NSString*token = responseObject[@"token"];
[[RCIMsharedRCIM]connectWithToken:tokensuccess:^(NSString*userId) {
NSLog(@"登陸成功,用戶ID為:%@",userId);
}error:^(RCConnectErrorCodestatus) {
NSLog(@"登錄的錯(cuò)誤碼為:%ld",(long)status);
}tokenIncorrect:^{
NSLog(@"token錯(cuò)誤");
}];
}failure:^(AFHTTPRequestOperation*operation,NSError*error) {
}];
4.聊天對(duì)話頁面
RCConversationViewController*chat = [[RCConversationViewControlleralloc]init];
chat.conversationType=ConversationType_PRIVATE;
chat.targetId= model.username;
chat.title= [NSStringstringWithFormat:@"與%@聊天",model.nickname];
[self.navigationControllerpushViewController:chatanimated:YES];