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站的大神们,在这种情况下,要如何“保存”消息然后再手动提取呢?