V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
ss1271
V2EX  ›  问与答

关于 iOS 使用 Sinch 处理即时消息的问题

  •  
  •   ss1271 · 2014-08-12 01:39:38 +08:00 · 2704 次点击
    这是一个创建于 3743 天前的主题,其中的信息可能已经有所发展或是发生改变。
    app中包含两个页面,一个是在线列表页(简称list view),一个是聊天窗口(简称chat view)

    现在app可以做到如下的事情:

    用户点击推送通知,app通过modal方式自动调出和发件人的chat view,可以显示出刚刚通知里包含的消息内容

    如果app收到了消息(log里也确实能够看到收到了推送)但是需要用户此时手动打开list view,找到并打开和相应发件人的chat,会发现刚刚通知包含的消息内容不会显示出来

    简而言之,就是如果让app在接收推送通知的时候完全自动显示,那么推送来的消息可以正确地显示在聊天窗内。如果中间不是自动弹出聊天窗,而是需要用户做几步操作,那么这个推送来的消息就“遗失”了。

    =======

    这个app使用了 Sinch 提供的即时消息服务,对于推送消息的处理,Sinch 描述如下:

    在AppDelegate内首先通过推送消息提取Sinch的payload:

    NSString* payload = [remotePush objectForKey:@"SIN"];

    ​然后用sinch client解开消息,这个result内,只包含senderId, messageId (详见文档: http://download.sinch.com/docs/iOS/latest/reference/html/Protocols/SINMessageNotificationResult.html

    id<SINNotificationResult> result = [client relayRemotePushNotificationPayload:payload];

    ​在能接收消息的那种情况下,我在此处用modal方式自动调用了chat view​。


    ChatView中,接收消息是Sinch Client的一个delegate方法(详见文档: http://download.sinch.com/docs/iOS/latest/reference/html/Protocols/SINMessageClientDelegate.html#//api/name/messageClient:didReceiveIncomingMessage: )

    messageClient:didReceiveIncomingMessage:

    ​在消息不能被显示的情况下,这个delegate方法是没有被调用的。​


    Sinch并没有给出如何手动通过messageId获取消息的方法,一切都是靠client内部的处理,而此app中,sinch client一直处于运行状态,理应能够传递消息才对

    我想请问V站的大神们,在这种情况下,要如何“保存”消息然后再手动提取呢?
    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2715 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 74ms · UTC 09:28 · PVG 17:28 · LAX 01:28 · JFK 04:28
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.