2

iOS と Android プラットフォームの両方で動作する 1 つのチャット アプリケーションを作成しています。「両方」のサブスクリプションが両方の側で受信されないことがあります。何が問題になる可能性があるのか​​ 誰か教えてもらえますか?

===================== iOSの場合 =====================

リクエストの送信、

XMPPJID *XMPPJIDObj=[XMPPJID jidWithString:aStrOtherJabberId];
[appDelegateObj.xmppRoster addUser:XMPPJIDObj withNickname:nil]; 

リクエスト受付中、

[appDelegateObj.xmppRoster acceptPresenceSubscriptionRequestFrom:aReceiverJID andAddToRoster:TRUE];

ユーザーの削除、

[appDelegateObj.xmppRoster removeUser:[XMPPJID jidWithString:aPresenceObj.userJabberID]];

===================== Androidの場合 =====================

リクエストの送信、

Roster.setDefaultSubscriptionMode(SubscriptionMode.manual);
myApp.getXmppConnection().getRoster().createEntry(visitorJabberId, visitorUserName, null);

リクエスト受付中、

final Presence presence1 = new Presence(Type.subscribed);
presence1.setFrom(myApp.getUserJabberId());
presence1.setType(Type.subscribed);
presence1.setTo(visitorJabberId);
myApp.getXmppConnection().sendPacket(presence1);
myApp.getXmppConnection().getRoster().createEntry(visitorJabberId, visitorUserName, null);

ユーザーの削除、

final RosterPacket rosterPacket = new RosterPacket();
rosterPacket.setType(IQ.Type.SET); 
final RosterPacket.Item item = new RosterPacket.Item(visitorJabberId, null);
item.setItemType(RosterPacket.ItemType.remove);
rosterPacket.addRosterItem(item);
myApp.getXmppConnection().sendPacket(rosterPacket);
4

2 に答える 2

0

名簿にユーザーを追加するときは、友人のプレゼンスにも登録する必要があります。これでサイクルが完了します。

たとえば、iOS の場合、次のようにフレンドを名簿に追加します。

[appDelegateObj.xmppRoster addUser:XMPPJIDObj withNickname:nil];

ただし、代わりにこれを使用する必要があります。

- (void)addUser:(XMPPJID *)jid withNickname:(NSString *)optionalName groups:(NSArray *)groups subscribeToPresence:(BOOL)subscribe

購読を設定していることを確認してくださいYES

または、次のようにして、所有しているコードを保持し、ユーザーのプレゼンスを手動でサブスクライブすることもできます。

[appDelegateObj.xmppRoster subscribePresenceToUser:XMPPJIDObj]

それがどのように機能するか教えてください。

于 2014-11-06T15:19:31.877 に答える