經(jīng)歷了繁忙的項目期,終于有時間閑下來總結一下項目中即時通訊遇到的問題。
使用即時通訊的流程,在融云官方網(wǎng)站有詳細的介紹,在這里不在詳細的介紹。這里收錄一些我在項目中遇到的問題。
1.系統(tǒng)依賴庫的添加,如果您使用的是Xcode 6.X版本,則需要將上面的動態(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.設置plist支持http

3.利用請求從服務器端獲取token。
因為獲取 Token 時需要提供 App Key 和 App Secret。如果在客戶端請求 Token,假如您的 App 代碼一旦被反編譯,則會導致您的 App Key和App Secret 泄露。所以,務必在您的服務器端獲取 Token。
AFHTTPRequestOperationManager*mgr = [AFHTTPRequestOperationManagermanager];
//服務器請求鏈接地址
NSString*urlstr =@"https://api.cn.rong.io/user/getToken.json";
//請求參數(shù)userID:用戶唯一標識name:用戶名portraitUri:用戶頭像鏈接
NSDictionary*parm =@{@"userId":PHONE,
@"name":USERNAME,
@"portraitUri":USERImage
};
NSString* timestamp = [[NSStringalloc]initWithFormat:@"%ld",(long)[NSDatetimeIntervalSinceReferenceDate]];
NSString* nonce = [NSStringstringWithFormat:@"%d",arc4random()];
//創(chuàng)建應用得到的appKey
NSString* appkey =RCAPPKey;
//簽名
NSString*Signature = [[NSStringstringWithFormat:@"%@%@%@",appkey,nonce,timestamp]base64EncodedString];
//以下是拼接請求內(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"];
//開始請求
[mgrPOST:urlstrparameters:parmsuccess:^(AFHTTPRequestOperation*operation,idresponseObject) {
//這里你就能得到token啦~
NSLog(@"%@", responseObject);
NSString*token = responseObject[@"token"];
[[RCIMsharedRCIM]connectWithToken:tokensuccess:^(NSString*userId) {
NSLog(@"登陸成功,用戶ID為:%@",userId);
}error:^(RCConnectErrorCodestatus) {
NSLog(@"登錄的錯誤碼為:%ld",(long)status);
}tokenIncorrect:^{
NSLog(@"token錯誤");
}];
}failure:^(AFHTTPRequestOperation*operation,NSError*error) {
}];
4.聊天對話頁面
RCConversationViewController*chat = [[RCConversationViewControlleralloc]init];
chat.conversationType=ConversationType_PRIVATE;
chat.targetId= model.username;
chat.title= [NSStringstringWithFormat:@"與%@聊天",model.nickname];
[self.navigationControllerpushViewController:chatanimated:YES];