直播行业的稳步发展和趋于饱和的市场大环境,导致人们开始疲于接受一对多的直播模式。为了促进直播的多元化发展,新的一对一直播模式正在逐渐兴起。相比传统的直播,一对一直播可以进行视频聊天,私密性强且互动性高。一对一交友系统源码、v聊富聊源码开始成为各大投资开发商的“新宠”,那么在开发过程中,它又是怎样实现实时通讯功能的呢?
1.发送方
首先,利用AFN进行网络请求,以获取到需要的数据参数。然后通过极光IM将Json字符串,json里面会有一个status参数用来区分本条私信具体功能(例如邀请、接受、拒绝、赴约等,上述代码以邀请为例),私信过程中可以选择是否给对方推送该条私信消息,并且可以自定义推送内容,私信发送成功之后展示邀请用户需要展示的界面。
NSString *url = [purl stringByAppendingFormat:@\"?service=接口名”];
NSDictionary *check = @{
@\"uid\":[Config getOwnID],
@\"token\":[Config getOwnToken],
@\"touid\":_userID,
@\"type\":@\"0\",
@\"content\":[NSString stringWithFormat:@\"%@邀请你进行1v1私聊\",[Config getOwnNicename]],
@\"status\":@\"1\"
};
AFHTTPSessionManager *session = [AFHTTPSessionManager manager];
[session POST:url parameters:check progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
NSNumber *number = [responseObject valueForKey:@\"ret\"];
if([number isEqualToNumber:[NSNumber numberWithInt:200]])
{
NSArray *data = [responseObject valueForKey:@\"data\"];
NSString *code = [NSString stringWithFormat:@\"%@\",[data valueForKey:@\"code\"]];
if([code isEqual:@\"0\"])
{
NSDictionary *info = [[data valueForKey:@\"info\"] firstObject];
NSString *json = [info valueForKey:@\"json\"];
[JMSGConversation createSingleConversationWithUsername:[NSString stringWithFormat:@\"%@%@\",JmessageName,self.userID]
completionHandler:^(id resultObject, NSError *error) {
JMSGMessage *message = nil;
JMSGOptionalContent *option = [[JMSGOptionalContent alloc]init];
NSString *active = minstr([info valueForKey:@\"active\"]);
if ([active isEqual:@\"0\"]) {
//发推送
option.noSaveNotification = NO;
option.customNotification.title = @\"云豹1v1\";
option.customNotification.alert = [NSString stringWithFormat:@\"%@邀请你进行1v1私聊\",[Config getOwnNicename]];
option.customNotification.enabled = YES;
}
else{
//不推
option.noSaveNotification = YES;
}
JMSGTextContent *textContent = [[JMSGTextContent alloc] initWithText:json];
//添加附加字段
[textContent addStringExtra:[Config getavatar] forKey:@\"avatar\"];
message = [resultObject createMessageWithContent:textContent];
[resultObject sendMessage:message optionalContent:option];
[MBProgressHUD showSuccess:@\"发送成功\"];
//请求接口加次数以便服务端统计接听率
[self addcount];
__weak typeof(self) weakself = self;
SendInvitationAlert *alert = [[SendInvitationAlert alloc] initWithTouid:_userID icon:self.icon userName:self.chatname refuseBlock:^(NSString *uid) {
[weakself sendCancelIM];
} andAfterThirtySecondsBlock:^(NSString *uid) {
UIAlertController *alert = [UIAlertController alertControllerWithTitle:@\"是否预约\" message:_yuyueMsg preferredStyle:UIAlertControllerStyleAlert];
[alert addAction:[UIAlertAction actionWithTitle:@\"取消\" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) {
}]];
[alert addAction:[UIAlertAction actionWithTitle:@\"预约\" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
[weakself yuyue];
}]];
[weakself presentViewController:alert animated:YES completion:nil];
}];
[alert show];
}];
}
else if ([code isEqual:@\"1001\"]){
UIAlertController *alert = [UIAlertController alertControllerWithTitle:@\"您的钻石不足\" message:@\"快快去充值吧\" preferredStyle:UIAlertControllerStyleAlert];
[alert addAction:[UIAlertAction actionWithTitle:@\"取消\" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) {
}]];
[alert addAction:[UIAlertAction actionWithTitle:@\"去充值\" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
CoinVeiw *coin = [[CoinVeiw alloc] init];
[[TCBaseAppDelegate sharedAppDelegate] pushViewController:coin animated:YES];
}]];
[self presentViewController:alert animated:YES completion:nil];
}
else{
NSString *msg = [NSString stringWithFormat:@\"%@\",[data valueForKey:@\"msg\"]];
[HUDHelper myalert:msg];
}
}
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
}];
2.接收方
考虑到消息需要全局接收,可以在VC公共父类或者tabbar里面接收,接收到之后先进行json解析,获取到数据,然后根据上文提到的status进行UI展示、事件处理。
-(void)onReceiveMessage:(JMSGMessage *)message error:(NSError *)error{
unRead = [[JMSGConversation getAllUnreadCount] intValue];
[self labeiHid];
NSString *jsonstr = [message.content valueForKey:@\"text\"];
NSDictionary *dicc = [jsonstr JSONValue];
NSString *status = minstr([dicc valueForKey:@\"status\"]);
NSString *fromName = message.fromName;
fromName = [fromName stringByReplacingOccurrencesOfString:JmessageName withString:@\"\"];
if (![status isEqual:@\"0\"]) {
[self removeCommentsView];
}
if ([status isEqual:@\"1\"]) {
//正在直播不接收消息
if ([[NSUserDefaults standardUserDefaults] boolForKey:@\"isLiveing\"]) {
return;
}
NSLog(@\"收到邀请消息\");
//播放声音
[self playTheRing];
ReceiveInvitationAlert *alert = [[ReceiveInvitationAlert alloc] initWithIcon:minstr([dicc valueForKey:@\"avatar\"]) userName:minstr([dicc valueForKey:@\"user_nicename\"]) agreeBlock:^(NSString *uid) {
[self createRoomWithTouid:fromName];
[self stopPlayAndRemovePlayer];
} refuseBlock:^(NSString *uid) {
[self replyWithTouid:fromName content:[NSString stringWithFormat:@\"%@拒绝了你的1v1私聊请求\",[Config getOwnNicename]] status:@\"3\"];
[self stopPlayAndRemovePlayer];
} andAfterThirtyMinutesBlock:^(NSString *uid) {
[self stopPlayAndRemovePlayer];
}];
alert.tag = [fromName integerValue];
[alert show];
}
else if ([status isEqual:@\"2\"]){
//主播同意并开播之后收到,进直播间观看 (请求被同意)
}
else if ([status isEqual:@\"3\"]){
//1v1请求被拒绝
}
else if ([status isEqual:@\"4\"]){
//收到赴约请求
}
else if ([status isEqual:@\"5\"]){
//对方同意赴约请求,去开播,此时我是主播,对方是用户
}
else if ([status isEqual:@\"6\"]){
//赴约请求被拒绝,我是主播,对方是用户
}
else if ([status isEqual:@\"7\"]){
//用户取消1v1申请
}
else if ([status isEqual:@\"8\"]){
//用户取消赴约
}
}
以上源码展现了一对一交友源码、v聊富聊源码实现实时通讯功能的方式,所以它们在市场上大受欢迎也不是没有原因的,一对一的模式无疑为人们提供了足够放松的交流空间,发展前景也十分可观。
声明:本篇文章为小编原创文章,转载请注明出处及作者。
版权声明
本文仅代表作者观点,不代表百度立场。
本文系作者授权百度百家发表,未经许可,不得转载。



