如何在Smack中“稍后”批准XMPP订阅请求(“稍后添加”功能)?

时间:2013-09-10 21:17:59

标签: xmpp smack

让我们假设Alice使用下一个代码向Bob发送订阅请求。

public bool AddBuddy(string jid) {
    var roster = conn.Roster;

    // 2` param is nickname
    roster.CreateEntry(jid, null, null);
    roster.SetSubscriptionMode(Roster.SubscriptionMode.Manual);

    Presence subscribe = new Presence(Presence.Type.Subscribe);
    subscribe.To = jid;
    conn.SendPacket(subscribe);
}

Bob记录后,会收到一个弹出窗口,告诉您是否要在下一个方法中添加。

public void ProcessPacket (Packet p0)
{
        Presence presence = p0.JavaCast<Presence> ();
        var a = presence;
}

但我需要实现“稍后添加”功能。我不知道如何在服务器中保存消息以及如何接收所有消息

2 个答案:

答案 0 :(得分:1)

您可以根据需要延迟订阅,无需在服务器上保存订阅包。并且,为了查询延迟订阅请求,只需查询名单,而不是模式both中的订阅。

关于您的代码的一句话:Roster.createEntry(String, String, String[]会自动发送在线状态包。无需再次发送。

答案 1 :(得分:0)

无需在服务器上保存任何内容,因为它会自动维护待处理的订阅请求,即。每当您稍后登录服务器时,订阅请求将再次推送给您(如果之前未处理过)。因此,只要您从服务器收到订阅请求时,只需将订阅请求本地保存在列表或其他内容中,并将该本地请求列表显示给用户,作为“朋友请求页面”,供用户接受/拒绝。如果应用程序的生命周期重新启动,它将再次从服务器接收所有待处理的子进程(或重新登录时)。如果这对您有用,请告诉我。