何時間にもわたるデバッグと、aSmack を使用してファイル転送が機能しない理由を見つけようとした後、通常のメッセージングは機能していましたが、最終的にこれに突き止めることができました。
Openfire サーバーは、ユーザーの名簿リストを取得するために Smack のドキュメントに記載されている方法に従っているときに、最後に / がない名簿の JID を送信しています。
Collection<RosterEntry> entries = roster.getEntries();
for (RosterEntry r : entries) {
Log.v("Gabriel","Receiving: " + r.getUser());
}
たとえば、ユーザー gabriel からメッセージを受信した場合、"差出人" は次のようになります。
gabriel@dragonov/Smack
しかし、r.getUser() はユーザーに次のように返します。
gabriel@dragonov
平
connection.getRoster().getPresence(contactName).getFrom()
帰ってきたのは「gabriel@dragonov」です。
これにより、ファイル転送が失敗しますが、奇妙なことに通常のメッセージではありません。ただし、 /Smack の最後に手動で追加すると
OutgoingFileTransfer transferr = manager.createOutgoingFileTransfer(contactJID+"/Smack");
できます。
私の質問は、リソース部分が含まれている完全な JID を受け取る方法、または裸の JID を使用するときに失敗しないようにファイル転送を構成するにはどうすればよいかということです。
編集:
私は次の方法を試しました:
Log.v("Gabriel", entries.size() + " buddy(ies):");
for (RosterEntry r : entries) {
Log.v("Pat","adding: " + r.getType() + " " + r.getName());
contacts.add(r.getUser());
}
for (String contact : contacts){
Iterator<org.jivesoftware.smack.packet.Presence> presences = connection.getRoster().getPresences(contact);
Log.v("Gabriel", contact+" has: ");
while(presences.hasNext()){
Log.v("Gabriel",presences.next().getFrom());
}
}
しかし、私はまだ裸のIDを取得しています。
出力: gabriel@dragonov には: gabriel@dragonov があります。