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站的大神们,在这种情况下,要如何“保存”消息然后再手动提取呢?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
https://www.v2ex.com/t/127325
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.