首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QuickBlox : GCDAsyncSocketErrorDomain错误

QuickBlox : GCDAsyncSocketErrorDomain错误
EN

Stack Overflow用户
提问于 2012-12-07 17:35:21
回答 1查看 2.3K关注 0票数 0

我正在尝试在我的应用程序中实现聊天模块。我已经成功地完成了从Simple Chat Demo到我的应用程序中的LoginRegister进程。它还返回脱机和联机用户的用户数组。

现在,在成功登录后,我得到了以下日志:-

代码语言:javascript
复制
error:
2012-12-07 14:50:07.056 App[5324:790b] QBChatService/xmppStreamDidConnect
2012-12-07 14:50:08.285 App[5324:790f] QBChatService/xmppStreamDidAuthenticate
2012-12-07 14:51:08.291 App[5324:711f] QBChatService/xmppStreamDidDisconnect, error=Error Domain=GCDAsyncSocketErrorDomain Code=7 "Socket closed by remote peer" UserInfo=0xb982330 {NSLocalizedDescription=Socket closed by remote peer}

而且我无法在我的应用程序中接收聊天消息。

有什么建议吗?

编辑:-

在我的应用程序中,登录完成后,我会将登录请求发送到QuickBlox应用程序接口

代码语言:javascript
复制
if(loginDone)
{
     NSString *userName = [_textUsername.text stringByReplacingOccurrencesOfString:@"@" withString:@"_"];
     NSString *userPass = [_textPassword.text stringByReplacingOccurrencesOfString:@"@" withString:@"_"];

     // Authenticate user
     [QBUsers logInWithUserLogin:userName password:userPass delegate:self context:userPass];
} 

 #pragma mark -
#pragma mark QBActionStatusDelegate

// QuickBlox API queries delegate
-(void)completedWithResult:(Result *)result  context:(void *)contextInfo
{    
    // QuickBlox User authentication result
    if([result isKindOfClass:[QBUUserLogInResult class]])
    {
        // Success result
        if(result.success)
        {
            QBUUserLogInResult *res = (QBUUserLogInResult *)result;

            // save current user
            [[DataManager shared] setCurrentUser: res.user];
            NSLog(@"%@",res.user);

            [[[DataManager shared] currentUser] setPassword:(NSString *)contextInfo];
            NSLog(@"%@",res.user);

            // Login to Chat
            [QBChat instance].delegate = self;
            [[QBChat instance] loginWithUser:[[DataManager shared] currentUser]];

            // Register as subscriber for Push Notifications
            [QBMessages TRegisterSubscriptionWithDelegate:nil];

            // send request for getting user's filelist
            PagedRequest *pagedRequest = [[PagedRequest alloc] init];
            [pagedRequest setPerPage:10];

            [QBContent blobsWithPagedRequest:pagedRequest delegate:self];

            [pagedRequest release];
        }
        else
        {
            UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Errors"
                                                            message:[result.errors description]
                                                           delegate:self
                                                  cancelButtonTitle:@"Ok"
                                                  otherButtonTitles: nil];
            alert.tag = 1;
            //[alert show];
            [alert release];

            [HUD hide:YES];
            [self AfterLoginController];
        }
    }
}

-(void)completedWithResult:(Result *)result
{
    if([result isKindOfClass:[QBUUserLogInResult class]]) // QuickBlox User authentication result
    {
        // Success result
        if(result.success)
        {
            // If we are authenticating through Twitter/Facebook - we use token as user's password for Chat module
            [self completedWithResult:result context:[BaseService sharedService].token];
        }
    }
    else if ([result isKindOfClass:[QBCBlobPagedResult class]])
    {
        // Success result
        if(result.success){
            QBCBlobPagedResult *res = (QBCBlobPagedResult *)result;

            // Save user's filelist
            [DataManager shared].fileList = [[res.blobs mutableCopy] autorelease];

            AppDelegate *app = (AppDelegate *)[[UIApplication sharedApplication] delegate];
            [app startsendPresenceTimer];

            [HUD hide:YES];            
            [self AfterLoginController];
        }
    }
    else
    {
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Errors"
                                                        message:[result.errors description]
                                                       delegate:self
                                              cancelButtonTitle:@"Ok"
                                              otherButtonTitles: nil];
        alert.tag = 1;
        //[alert show];
        [alert release];

        [HUD hide:YES];
        [self AfterLoginController];
    }
}

现在在AppDelegate中:

代码语言:javascript
复制
- (void) startsendPresenceTimer
{
    [QBChat instance].delegate = self;

    // send presence
    if(self.sendPresenceTimer == nil)
    {
        self.sendPresenceTimer = [NSTimer scheduledTimerWithTimeInterval:10 target:self selector:@selector(sendPresence) userInfo:nil
                                                                 repeats:YES];
    }

    if (self.requesAllUsersTimer == nil)
    {
        self.requesAllUsersTimer= [NSTimer scheduledTimerWithTimeInterval:10 target:self selector:@selector(updateUsers) userInfo:nil repeats:YES];
    }
    [self.requesAllUsersTimer fire];
}

// send presence
- (void)sendPresence{
    // presence in QuickBlox Chat
    [[QBChat instance] sendPresence];
    // presence in QuickBlox
    [QBUsers userWithExternalID:1 delegate:nil];
}

- (void)updateUsers
{
    // Retrieve all users
    PagedRequest* request = [[PagedRequest alloc] init];
    request.perPage = 100; // 100 users
    [QBUsers usersWithPagedRequest:request delegate:self];
    [request release];
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-12-07 17:59:23

您是否定期发送在线状态?它之所以需要,是因为聊天服务器必须知道你是在线还是离线。

看看QuickBlox Chat setup guide,lines

记住,QuickBlox是简单的XMPP聊天,...

只写一行

代码语言:javascript
复制
[NSTimer scheduledTimerWithTimeInterval:30 target:[QBChat instance] selector:@selector(sendPresence) userInfo:nil repeats:YES];

应用程序将每30秒发送一次状态

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13760381

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档