不知道这个topic是不是合适,主要是看到cnode的官方client是用ionic做的,所以还是发上来了,希望能够得到各位的帮助。
我现在正在用ionic做一个社区化的app,要用到push notification,是乎在国内只有极光有官方的cordova的plugin插件(我在读cnode的ionic app代码时,看到用的是一个自己开发的plugin,我没有用是不太清楚cnode的通知需求,初看一下cnode是乎只用一种通知,相对简单,可能我这里不适用),所以没有别的选择,只能用它了。用了之后有几个问题: 极光推送的问题 1、极光推notification的时候,ios端无法获得extras,我看官方文档中也是含含糊糊,但调试了很多次还是这样。我现在是walk arround,把extras放在sound里面传过去,也算把ios糊弄过去了; 2、在用服务端推notification的时候,如果有一个alias不存在,将导致所有推送失败。我看cnode开发的时候也碰到了这个问题,不过cnode是只推单个用户,问题不大。我现在的解决方案是,在ionic客户端设置setAlias的时候,再到服务端的用户上做个标记,服务端只对有设置过alias的用户推。
上面这些是具体的技术问题,下面是一些设计上的考虑,可能和极光没有关系,我试图提出一个整体的解决方案: a、极光客户端有2个事件openNotificaiton和recieveNotification,当app在前台,只有recieveNotification,反之若app在后台,则是只用当用户点击ios上面的通知时才会触发openNotification。所以当app在后台,用户收到通知后,不点击ios上的通知,直接点开app,则notification不会被触发。
b、当app是前台,而notification有多种类型,根据不同类型需要转向到不同页面,这个时候,app该如何处理,直接转肯定不行,是乎要有一个app内部的通知列表页面才可以(当有recieveNotification时,插入到内部通知列表中);但是如果有这个通知管理页面,那当app是后台,这些notification又不会有机会去更新这个通知页面,最终导致app里面有2个通知列表,app外面有个ios的通知列表,很不统一。
c、由于上面的种种不便,我想可能还是不能仅仅依靠极光的通知,要自己的服务端还要建立一个通知机制,具体如下: 1、在ionic客户端建立一个页面叫“我的消息”,同时服务端也要存储“我的消息”;
2、当需要通知时,服务端推notification,同时存储通知,当用户点击ios的通知时,同时转向“我的消息页面”,同时向服务端pull一下我的消息,再把ios的所有通知清除,并把ios的notification badge reset到0。这种情况在app在后台时并用户点击ios的通知,或者app不运行时是可以的。但如果app在前台运行,或者app在后台运行,但用户没有点击ios的通知栏的话,体验就不好,那可能必须这样做: 极光不光有notification,还有一个message,message是实时在线的,和ios的通知没有关系,估计是用websocket实现的。所以服务端在推notification的时候,再推message,ioinic客户端在recieveMessage的时候,把消息所指的信息在app中更新好(比如新加了一个帖子,就把帖子拉下来),把message加入到“我的消息”中,同时在标题栏上有一个badge,显示有多少个未读我的消息,这个badge在app的顶端,任何页面都可以看到。
3、用户进入“我的消息”页面后,点击到某个消息,就转向某页,同时设置已读标记,并移除。同时还有一个设置全部已读的按钮。
我对angular和node都还比较熟悉,但这是我第一次做app,特别不熟悉app的通知机制,上面的问题折磨了我很久,欢迎各位朋友指正,多谢。另外,上面的描述可能不是很清楚,见谅。
Ron
ionic 结合phonegap 时 GPS也不精准不快速。
花了一天时间完全按照我的设想实现完成了,效果还不错。