一对一交友系统源码,v聊富聊源码如何实现实时通讯功能

小编 2026-07-06 阅读:727 评论:0
直播行业的稳步发展和趋于饱和的市场大环境,导致人们开始疲于接受一对多的直播模式。为了促进直播的多元化发展,新的一对一直播模式正在逐渐兴起。相比传统的直播,一对一直播可以进行视频聊天,私密性强且...

直播行业的稳步发展和趋于饱和的市场大环境,导致人们开始疲于接受一对多的直播模式。为了促进直播的多元化发展,新的一对一直播模式正在逐渐兴起。相比传统的直播,一对一直播可以进行视频聊天,私密性强且互动性高。一对一交友系统源码、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聊富聊源码实现实时通讯功能的方式,所以它们在市场上大受欢迎也不是没有原因的,一对一的模式无疑为人们提供了足够放松的交流空间,发展前景也十分可观。
声明:本篇文章为小编原创文章,转载请注明出处及作者。

版权声明

本文仅代表作者观点,不代表百度立场。
本文系作者授权百度百家发表,未经许可,不得转载。

热门文章
  • Sequential Monte Carlo Methods (SMC) 序列蒙特卡洛/粒子滤波/Bootstrap Filtering

    Sequential Monte Carlo Methods (SMC) 序列蒙特卡洛/粒子滤波/Bootstrap Filtering
    Problem Statement 我们考虑一个具有马尔可夫性质、非线性、非高斯的状态空间模型(State Space Model):对于一个时间序列上的观测结果{yt,t∈N}\\{ y_t , t \\in N \\}{yt​,t∈N},我们认为每个观测结果yty_tyt​的生成依赖于一个无法直接观察的隐变量xt∈{xt,t∈N}x_t \\in \\{x_t , t \\in N \\}xt​∈{xt​,t∈N},即:p(...
  • 机房智能化温湿度解决方式之POE供电以太网温湿度传感器

    机房智能化温湿度解决方式之POE供电以太网温湿度传感器
    机房智能化温湿度解决方式之POE供电以太网温湿度传感器 北京盈创力和电子科技有限公司 智能型TCP网口温湿度记录仪 北京IP网络温湿度记录仪厂家,北京盈创力和 北京智能型TCP网口温湿度记录仪IP网络温湿度记录仪是一种新型的基于TCP/IP协议双绞线以太网标准温湿度采集模块,利用它可以实现现场温度值、相对湿度值的采集,同时利用其自身的RJ45通信接口可以方便地和机房监控主机或交换机集线器进行联网。 工作于-40℃~85℃工业级带...
  • Hive 系统函数及示例

    Hive 系统函数及示例
    查看所有系统函数 show functions; 函数分类 内置函数【系统函数】 数学函数: floor、round、ceil、cos、log2等 字符串函数: length、reverse、trim、lower、get_json_object、repeat等 收集函数: size 转换函数: cast 日期函数: year、month、datediff、date、date_add等 条件函数: coalesce、case…w...
  • CSRF的原理和防范措施

    CSRF的原理和防范措施
    a)攻击原理:i.用户C访问正常网站A时进行登录,浏览器保存A的cookieii.用户C再访问攻击网站B,网站B上有某个隐藏的链接或者图片标签会自动请求网站A的URL地址,例如表单提交,传指定的参数iii.而攻击网站B在访问网站A的时候,浏览器会自动带上网站A的cookieiv.所以网站A在接收到请求之后可判断当前用户是登录状态,所以...
  • HTTP状态保持的原理

    HTTP状态保持的原理
    a)在用户登录之后,浏览器返回响应的时候会在响应中添加上cookieb)浏览器接收到cookie之后会自动保存c)当用户再次请求同一服务器中的其他网页的时候,浏览器会自动带上之前保存的cookied)服务接收到请求之后可以请 request 对象中取到cookie 判断当前用户是否登录  Http是无状态的,就是连接时数据互通,关闭后...
标签列表