wclssdn
wclssdn
  • 发布:2016-12-17 19:43
  • 更新:2016-12-19 02:06
  • 阅读:1925

【报Bug】iOS点击通知闪退

分类:HBuilder

详细问题描述
[内容]
发送通知到iOS,如果app在后台,则通知栏有通知,点击通知,正常调起app。
如果app被杀掉,点击通知,则app闪退(弹出瞬间消失),再次启动正常启动。弹出上个消息内容。
如果app被刷掉,点击app启动,则正常启动,弹出通知内容。

唯独有问题的就是app不在运行中,点击了通知。必然闪退。

重现步骤
[步骤]
把app杀掉,给app推送一条通知,点击此通知。
[结果]
闪退
[期望]
不闪退,正常打开app,拿到通知消息

运行环境
[系统版本]
iOS 10.2
[浏览器版本]
[IDE版本]
7.6.3
[mui版本]
3.0

  1. 附件
    [代码片段]
    [安装包]

联系方式
[QQ]
88596443
[电话]

2016-12-17 19:43 负责人:无 分享
已邀请:
wclssdn

wclssdn (作者)

还有,为何iOS收到推送后,会弹出一个iOS6风格的confirm呢? 点击确定或者取消之后,才能收到push的receive事件。。。。

无论如何,都收不到click事件。。。之后receive事件。。这个真的对么?

  • wclssdn (作者)

    跟说明完全不一样嘛。。。 官方都不知道这个逻辑么。。。 http://ask.dcloud.net.cn/article/34

    2016-12-17 19:49

  • wclssdn (作者)

    弹框的说明找到了: https://developer.apple.com/library/content/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/SupportingNotificationsinYourApp.html#//apple_ref/doc/uid/TP40008194-CH4-SW26

    2016-12-19 01:47

  • wclssdn (作者)

    ios 消息字段说明: https://developer.apple.com/library/content/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/PayloadKeyReference.html#//apple_ref/doc/uid/TP40008194-CH17-SW1

    2016-12-19 01:50

  • wclssdn (作者)

    个推中针对字段的说明:http://docs.getui.com/server/php/template/#5-ios 其中category表示“在客户端通知栏触发特定的action和button显示”。。。 就是ios那个ios6风格的弹窗。。。。

    2016-12-19 01:51

wclssdn

wclssdn (作者)

bug找到原因了。。

更新:
当监听到receive事件时:android得到的message.payload是字符串,而ios得到的message.payload是对象。。。
当监听到click时间时(只有ios发现过):ios得到的message.payload是对象,message.payload.payload是字符串

真是醉了。。。
处理代码:

var data = {};  
if (typeof message.payload == 'string'){  
    data = JSON.parse(message.payload);  
}else if (typeof message.payload === 'object'){  
    data = JSON.parse(message.payload.payload);  
}else{  
    return false;  
}

wclssdn

wclssdn (作者)

不让编辑了。。。

更新如下:

var data = {};  
if (typeof message.payload == 'string'){  
    data = JSON.parse(message.payload);  
}else if (typeof message.payload === 'object'){  
    if (/*type == 'receive' && */typeof message.payload.payload === 'string'){  
        data = JSON.parse(message.payload.payload);  
    }else{  
        data = message.payload;  
    }  
}else{  
    return false;  
}
wclssdn

wclssdn (作者)

卧槽。。。。 经过多次实验。。。 bug竟然是。。 在处理push事件的时候, 调用了clear导致的。。。

plus.push.clear(); // 不能在处理push事件中调用
wclssdn

wclssdn (作者)

总结下问题:

  1. 安卓在通知栏点击,得不到click事件,而是receive事件
  2. ios和安卓同样是receive事件,ios得到的message.payload是对象,而安卓得到的是json字符串
  3. ios会弹出一个ios6风格的弹窗,这个取消不了,如果收到多个消息,还弹多次。点取消并不会真的取消,依旧会按照点确定处理
  4. app离线收到的消息,启动后,有弹窗,点击后无任何效果,等很久后才有效果(push监听事件会在几十秒后执行)

该问题目前已经被锁定, 无法添加新回复