2

XMPP RobbieHanson フレームワークを使用しています。現在、didReceivePresence 関数で次のコードを使用して自動サブスクリプションを有効にしています。

    if([[presence type] isEqualToString:@"subscribe"])
    {
        NSLog(@"presence user wants to subscribe %@",[presence fromStr]);

        [[self xmppRoster] acceptPresenceSubscriptionRequestFrom:[presence from] andAddToRoster:YES];
    }
    else if([[presence type] isEqualToString:@"unsubscribe"])
    {
        [xmppRoster rejectPresenceSubscriptionRequestFrom:[presence from]];
        [xmppRoster revokePresencePermissionFromUser:[presence from]];
    }

一部のユーザーでは、最後に「0」秒または 403 禁止として表示されます。しかし、ある時点で、彼らがオフラインまたはオンラインになっていることがわかりました。enter code hereそれは、私が持っていて、彼らがプレゼンスサブスクリプションを受け入れたことを意味します.

    if([[presence type] isEqualToString:@"subscribe"])
    {
        NSLog(@"presence user wants to subscribe %@",[presence fromStr]);

        [[self xmppRoster] acceptPresenceSubscriptionRequestFrom:[presence from] andAddToRoster:YES];
    }
    else if([[presence type] isEqualToString:@"unsubscribe"])
    {
        [xmppRoster rejectPresenceSubscriptionRequestFrom:[presence from]];
        [xmppRoster revokePresencePermissionFromUser:[presence from]];
    }
4

1 に答える 1

0

TCP 接続が閉じられておらず、ユーザーにオフラインを宣言したにもかかわらず、最後に表示されたものは常に言及され、ゼロとして返されます。

フレームワークで「xmppstream」の切断を明示的に呼び出して、TCP ソケットを切断する必要があります。

また、バックグラウンドで実行されていて、XMPPReconnect モジュールが有効になっているために再接続されるアプリケーションは、最後に確認された後、サーバーが最後に接続を強制終了したことを示します。ただし、ユーザーがバックグラウンド モードで再接続すると、オンラインとして表示されます。

403 Forbidden の場合、プレゼンスはユーザーにサブスクライブする必要があります。万が一彼がシステムを離れる場合、またはチャット サーバーでユーザーを削除して再度追加する場合、そのユーザーはサブスクリプション リクエストを再度送信して受け入れる必要があります。それ以外の場合は 403 エラー投げられます。

Apple アプリで有効になっているバックグラウンド モードを停止したので、これで問題なく動作します。

これ以上の提案は大歓迎です。

于 2016-02-02T12:34:04.247 に答える