Как я могу установить ресурс в XMPP Framework в iOS

#ios #objective-c #ejabberd #xmppframework

#iOS #objective-c #ejabberd #xmppframework

Вопрос:

Я создаю приложение для чата с использованием ejabberd в iOS и Android. Приложение также имеет автономное push-уведомление. Для этого мне нужно подключаться к одному и тому же ресурсу при каждом входе в систему. В Android я могу сделать это следующим образом

  XMPPTCPConnectionConfiguration.Builder confBuilder = XMPPTCPConnectionConfiguration.builder()
            .setServiceName(serviceName)
            .setUsernameAndPassword(jidParts[0], password)
            .setConnectTimeout(3000)
            // .setDebuggerEnabled(true)
            .setResource("xxxxx")
            .setSecurityMode(ConnectionConfiguration.SecurityMode.required);
  

Но в IOS я не могу setResource потому что я не знаю, как установить это на iOS.
код входа выглядит следующим образом

  - (BOOL)connect:(NSString *)myJID withPassword:(NSString *)myPassword auth:(AuthMethod)auth hostname:(NSString *)hostname port:(int)port
{
    if (![xmppStream isDisconnected]) {
        [self disconnect];
    }

    if (myJID == nil || myPassword == nil) {
        return NO;
    }

    NSLog(@"Connect using JID %@", myJID);

    [xmppStream setMyJID:[XMPPJID jidWithString:myJID]];
    username = myJID;
    password = myPassword;
    authMethod = auth;

    xmppStream.hostName = (hostname ? hostname : [username componentsSeparatedByString:@"@"][1]);
    if(port){
        xmppStream.hostPort = port;
    }

    NSError *error = nil;
    if (port == 5223) {
        self.xmppReconnect.usesOldSchoolSecureConnect = YES;
        if (![xmppStream oldSchoolSecureConnectWithTimeout:30 error:amp;error])
        {
            DDLogError(@"Error connecting: %@", error);
            if (self.delegate){
                [self.delegate onLoginError:error];
            }

            return NO;
        }
    } else {
        if (![xmppStream connectWithTimeout:30 error:amp;error])
        {
            DDLogError(@"Error connecting: %@", error);
            if (self.delegate){
                [self.delegate onLoginError:error];
            }

            return NO;
        }
    }

    return YES;
}
  

Как я могу рекламировать ресурс в приведенном выше коде?

Комментарии:

1. Ресурс и домен будут обрабатываться XMPP framework, как только вы назначите JIDString.

2. @SachinVas Но я хочу назначить тот же ресурс, когда я подключаюсь к xmpp-серверу. Это также обрабатывается в XMPP Framework?

3. Зачем вам нужен тот же ресурс для использования push-уведомлений? Например, с компонентом Tigase Push для Tigase XMPP Server такого ограничения нет (см. docs.tigase.net/tigase-push/1.0.0 / … ); что еще нужно для библиотеки Tigase Swift для iOS ( docs.tigase.net/tigase-swift/snapshot/Tigase_Swift_Guide/html ) поддерживает настройку ресурса

4. Вы можете назначить другой ресурс, просто посмотрите на перегруженные методы инициализации.

Ответ №1:

Вы можете установить ресурс, изменив метод инициализации XMPPJID на

 [xmppStream setMyJID:[XMPPJID jidWithString:myJID resource:resourceId]];
  

Это перегруженный метод в XMPPJID