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

2014-08-12 01:39:38 +08:00
 ss1271
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站的大神们,在这种情况下,要如何“保存”消息然后再手动提取呢?
2744 次点击
所在节点    问与答
0 条回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/127325

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX