Я использую IOS XMPPFramework для нашего приложения чата, и я создаю группу и добавляю выбранный элемент с приведенным ниже кодом, и получатели успешно присоединяются к группе. И если я запрашиваю список членов этой группы администраторов успешно извлекать участник группы, но члены не могу получить тот же самый список, и вместо этого они получают ошибку ниже:Пользователи не могут получить список участников в комнате muc
<iq xmlns="jabber:client" from="[email protected]" to="[email protected]/15323458207749806891286" id="FF691FF5-D12B-4BAA-AB19-84E7A2B945D4" type="error"><query xmlns="http://jabber.org/protocol/muc#admin"><item affiliation="member"/></query><error code="403" type="auth"><forbidden xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"/><text xmlns="urn:ietf:params:xml:ns:xmpp-stanzas">Administrator privileges required</text></error></iq>
Вы можете найти создать и предложить коды ниже:
- (void)xmppRoom:(XMPPRoom*)sender didFetchMembersList:(NSArray *)items
{
CLS_LOG(@"Received MemberList: %@",items);
if (sender.inviteMemberList) {
if ([sender.inviteMemberList count]) {
for (NSString *user in sender.inviteMemberList) {
[sender inviteUser:[XMPPJID jidWithString:user] withMessage:nil];
}
CLS_LOG(@"Adding Members To Group %@",sender.inviteMemberList);
XMPPIQ *addMemberIQ = [XMPPIQ addMembersToGroup:sender.inviteMemberList withElementId:[self generateMessageID] andNick:sender.nickName andGroupJid:[sender.roomJID bare]];
CLS_LOG(@"Sending IQ To Add Member: %@",addMemberIQ);
[xmppStream sendElement:addMemberIQ];
sender.inviteMemberList = nil;
}
}
}
+ (nonnull instancetype) addMembersToGroup:(NSArray *)memberList withElementId:(NSString*)elementId andNick:(NSString*)nick andGroupJid:(NSString*)groupJid
{
NSXMLElement *queryElement = [self elementWithName:@"query" xmlns:XMPPMUCAdminNamespace];
for (NSString *member in memberList) {
NSXMLElement *itemElement = [self elementWithName:@"item"];
[itemElement addAttributeWithName:@"affiliation" stringValue:@"member"];
[itemElement addAttributeWithName:@"jid" stringValue:member];
[queryElement addChild:itemElement];
}
return [self iqWithType:@"set" to:[XMPPJID jidWithString:groupJid] elementID:elementId child:queryElement];
}
[EDIT] Вы также можете найти мою комнату конфигурации в поле ниже XML:
<?xml version="1.0" encoding="UTF-8"?>
<x xmlns="jabber:x:data" type="form">
<title>Configuration of room [email protected]</title>
<field type="hidden" var="FORM_TYPE">
<value>http://jabber.org/protocol/muc#roomconfig</value>
</field>
<field type="text-single" label="Room title" var="muc#roomconfig_roomname">
<value>osmannn</value>
</field>
<field type="text-single" label="Room description" var="muc#roomconfig_roomdesc">
<value />
</field>
<field type="boolean" label="Make room persistent" var="muc#roomconfig_persistentroom">
<value>1</value>
</field>
<field type="boolean" label="Make room public searchable" var="muc#roomconfig_publicroom">
<value>1</value>
</field>
<field type="boolean" label="Make participants list public" var="public_list">
<value>1</value>
</field>
<field type="boolean" label="Make room password protected" var="muc#roomconfig_passwordprotectedroom">
<value>0</value>
</field>
<field type="text-private" label="Password" var="muc#roomconfig_roomsecret">
<value />
</field>
<field type="list-single" label="Maximum Number of Occupants" var="muc#roomconfig_maxusers">
<value>200</value>
<option label="5">
<value>5</value>
</option>
<option label="10">
<value>10</value>
</option>
<option label="20">
<value>20</value>
</option>
<option label="30">
<value>30</value>
</option>
<option label="50">
<value>50</value>
</option>
<option label="100">
<value>100</value>
</option>
<option label="200">
<value>200</value>
</option>
</field>
<field type="list-single" label="Present real Jabber IDs to" var="muc#roomconfig_whois">
<value>anyone</value>
<option label="moderators only">
<value>moderators</value>
</option>
<option label="anyone">
<value>anyone</value>
</option>
</field>
<field type="list-multi" label="Roles for which Presence is Broadcasted" var="muc#roomconfig_presencebroadcast">
<value>moderator</value>
<value>participant</value>
<value>visitor</value>
<option label="Moderator">
<value>moderator</value>
</option>
<option label="Participant">
<value>participant</value>
</option>
<option label="Visitor">
<value>visitor</value>
</option>
</field>
<field type="boolean" label="Make room members-only" var="muc#roomconfig_membersonly">
<value>1</value>
</field>
<field type="boolean" label="Make room moderated" var="muc#roomconfig_moderatedroom">
<value>1</value>
</field>
<field type="boolean" label="Default users as participants" var="members_by_default">
<value>1</value>
</field>
<field type="boolean" label="Allow users to change the subject" var="muc#roomconfig_changesubject">
<value>1</value>
</field>
<field type="boolean" label="Allow users to send private messages" var="allow_private_messages">
<value>1</value>
</field>
<field type="list-single" label="Allow visitors to send private messages to" var="allow_private_messages_from_visitors">
<value>anyone</value>
<option label="nobody">
<value>nobody</value>
</option>
<option label="moderators only">
<value>moderators</value>
</option>
<option label="anyone">
<value>anyone</value>
</option>
</field>
<field type="boolean" label="Allow users to query other users" var="allow_query_users">
<value>1</value>
</field>
<field type="boolean" label="Allow users to send invites" var="muc#roomconfig_allowinvites">
<value>0</value>
</field>
<field type="boolean" label="Allow visitors to send status text in presence updates" var="muc#roomconfig_allowvisitorstatus">
<value>1</value>
</field>
<field type="boolean" label="Allow visitors to change nickname" var="muc#roomconfig_allowvisitornickchange">
<value>1</value>
</field>
<field type="boolean" label="Allow visitors to send voice requests" var="muc#roomconfig_allowvoicerequests">
<value>1</value>
</field>
<field type="boolean" label="Allow subscription" var="muc#roomconfig_allow_subscription">
<value>1</value>
</field>
<field type="text-single" label="Minimum interval between voice requests (in seconds)" var="muc#roomconfig_voicerequestmininterval">
<value>1800</value>
</field>
<field type="jid-multi" label="Exclude Jabber IDs from CAPTCHA challenge" var="muc#roomconfig_captcha_whitelist" />
</x>
Можете ли вы помочь мне с этой проблемой?
[EDIT 2:] Я изменил свой код, как в приведенном ниже коде. И я также сделал конфигурацию с тобой, Но все тот же результат. Я что-то пропустил на стороне сервера?
- (void)xmppRoom:(XMPPRoom *)sender didFetchConfigurationForm:(NSXMLElement *)configForm{
NSXMLElement *newConfig = [configForm copy];
NSArray* fields = [newConfig elementsForName:@"field"];
for (NSXMLElement *field in fields) {
NSString *var = [field attributeStringValueForName:@"var"];
if ([var isEqualToString:@"muc#roomconfig_persistentroom"]) {
[field removeChildAtIndex:0];
[field addChild:[NSXMLElement elementWithName:@"value" stringValue:@"1"]];
}else if ([var isEqualToString:@"muc#roomconfig_roomname"]){
[field removeChildAtIndex:0];
[field addChild:[NSXMLElement elementWithName:@"value" stringValue:sender.groupName]];
}
else if ([var isEqualToString:@"muc#roomconfig_publicroom"]){
[field removeChildAtIndex:0];
[field addChild:[NSXMLElement elementWithName:@"value" stringValue:@"0"]];
}
else if ([var isEqualToString:@"muc#roomconfig_whois"]) {
[field removeChildAtIndex:0];
[field insertChild:[NSXMLElement elementWithName:@"value" stringValue:@"anyone"] atIndex:0];
}
else if ([var isEqualToString:@"muc#roomconfig_allow_subscription"]) {
[field removeChildAtIndex:0];
[field addChild:[NSXMLElement elementWithName:@"value" stringValue:@"1"]];
}
else if ([var isEqualToString:@"muc#roomconfig_membersonly"]){
[field removeChildAtIndex:0];
[field addChild:[NSXMLElement elementWithName:@"value" stringValue:@"1"]];
}
else if ([var isEqualToString:@"public_list"]){
[field removeChildAtIndex:0];
[field addChild:[NSXMLElement elementWithName:@"value" stringValue:@"1"]];
}
else if ([var isEqualToString:@"muc#roomconfig_allowinvites"]){
[field removeChildAtIndex:0];
[field addChild:[NSXMLElement elementWithName:@"value" stringValue:@"1"]];
}
}
CLS_LOG(@"Sending Configuration: %@",newConfig);
[sender configureRoomUsingOptions:newConfig];
if (sender.inviteMemberList) {
CLS_LOG(@"Adding Members To Group %@",sender.inviteMemberList);
XMPPIQ *addMemberIQ = [XMPPIQ addMembersToGroup:sender.inviteMemberList withElementId:[self generateMessageID] andNick:sender.nickName andGroupJid:[sender.roomJID bare]];
CLS_LOG(@"Sending IQ To Add Member: %@",addMemberIQ);
[xmppStream sendElement:addMemberIQ];
[sender fetchMembersList];
}
}
- (void)xmppRoom:(XMPPRoom*)sender didFetchMembersList:(NSArray *)items{
CLS_LOG(@"Fetched Members: %@",items);
if (sender.inviteMemberList) {
if ([sender.inviteMemberList count]) {
for (NSString *user in sender.inviteMemberList) {
[sender inviteUser:[XMPPJID jidWithString:user] withMessage:nil];
}
sender.inviteMemberList = nil;
}
}
}
Я изменил это кому угодно, но результат тот же. Вы можете видеть, что моя конфигурация xml на отредактированной странице – tolgatanriverdi
отредактировала мое сообщение – tolgatanriverdi
действительно странно, возможно, вы заархивируете весь свой связанный код, от createRoom до InviteUser и ваш файл конфигурации сервисов и поделитесь им со мной, я попытаюсь выяснить. Никогда не получай свою проблему. – dichen