在 Mobilefirst V7.1 上使用 Clevertap 推送通知在启动画面上出现 iOS 应用程序崩溃问题

Posted

技术标签:

【中文标题】在 Mobilefirst V7.1 上使用 Clevertap 推送通知在启动画面上出现 iOS 应用程序崩溃问题【英文标题】:iOS App crash issue on Splash Screen with Clevertap Push Notification on Mobilefirst V7.1 【发布时间】:2018-05-04 06:22:09 【问题描述】:

点击推送通知后ios 移动应用程序崩溃并显示以下错误。当应用程序关闭时,Clevertap 推送通知正在观察崩溃。当移动应用程序处于后台或前台时,不会发生崩溃。该应用程序是使用 Mobilefirst V7.1 构建的,所有 Mobilefirst 库和方法都用于处理 iOS 应用程序上的推送通知。

我们已尝试从设备中提取日志并在应用崩溃之前获取日志。

2018-04-30 15:07:39.466141+0530 AppDev[1386:622734] [DEBUG] [WL_AFHTTPRequestOperationManagerWrapper_PACKAGE] -[WLAFHTTPRequestOperationManagerWrapper start] in WLAFHTTPRequestOperationManagerWrapper.m:356 :: Starting the request with URL https://wls.**.co.in:80/Dev/apps/services/api/AppDev/iphone/query

2018-04-30 15:07:40.337279+0530 AppDev[1386:619825] [FATAL] [WORKLIGHT] Uncaught Exception: *** -[__NSArrayI objectAtIndex:]: index 1 beyond bounds [0 .. 0]

2018-04-30 15:07:40.355216+0530 AppDev[1386:619825] *** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayI objectAtIndex:]: index 1 beyond bounds [0 .. 0]'

*** First throw call stack:
(0x182653d38 0x181b68528 0x1825ecc44 0x18251cdbc 0x100574328 0x100573dcc 0x18302c4c4 0x1825fc99c 0x1825fc6c0 0x1825fbec0 0x1825f9aa8 0x18251a2d8 0x1843abf84 0x18bac7880 0x100477f4c 0x18203e56c)
libc++abi.dylib: terminating with uncaught exception of type NSException

我无法确定 Mobilefirst 库或 Clevertap 库是否存在问题。但日志清楚地表明问题出在 Mobilefirst 上。

【问题讨论】:

明确一点,您是否发送了clevertap 通知?并且您正在使用 MFP 推送来接收这些通知? 嗨@VivinK,很高兴有你在这个问题上。是的,我们使用 Clevertap 发送推送通知并使用 MFP 推送接收这些通知。 请阅读Under what circumstances may I add “urgent” or other similar phrases to my question, in order to obtain faster answers? - 总结是这不是解决志愿者的理想方式,并且可能会适得其反。请不要将此添加到您的问题中。 最可能的原因是格式不同 - Clevertap 发送的内容与 MFP 服务器发送的内容。但是你每次都会看到这个错误 - 这让我感到惊讶。您能否从 MFP 服务器发送通知,并通过点击通知确认打开此应用程序时不会导致应用程序崩溃。 @VivinK 是的,我们已尝试发送 MFP 推送,但没有任何反应。但崩溃仅发生在 Clevertap 推送通知中。我只想知道我需要重写哪个 Mobilefirst 方法来处理 iOS 应用程序中的推送消息 【参考方案1】:

我们能够以某种方式管理崩溃问题,只需更改 iOS 应用程序的配置文件。我们已经在配置文件中注释掉了默认的推送消息处理,现在应用程序在单击推送消息时不会崩溃。但是当应用程序打开时,我们无法读取推送消息,也无法在警报消息中显示推送消息的详细信息。

【讨论】:

【参考方案2】:

出现此问题是因为两个 MFP SDK 都无法解析从 CleverTap 发送的推送通知的格式。当应用程序启动时,MFP Push 和 CleverTap 插件竞争消息,并且很可能,MFP Push 插件首先到达那里并尝试读取消息。

由于应用程序中已经存在 CleverTap SDK,您可以关闭 MFP Push 插件以确保只有 CleverTap SDK 读取所有通知。

为此,请导航至:

<Workspace>/<HybridProjectName>/apps/<HybridApplication>/iphone/native 

文件夹。

在这里打开 config.xml 并找到这些行:

<feature name="Push">
        <param name="ios-package" value="Push" />
        <param name="onload" value="true" />
</feature>

改为:

<param name="onload" value="false" />

这会阻止加载 MFP Push 插件。

注意:如果您重新构建 iPhone/iPad 环境,此更改将被覆盖。

【讨论】:

以上是关于在 Mobilefirst V7.1 上使用 Clevertap 推送通知在启动画面上出现 iOS 应用程序崩溃问题的主要内容,如果未能解决你的问题,请参考以下文章

如何避免自启动 API 调用 Mobilefirst 平台服务器 V7.1

使用 IBM MobileFirst Platform v7.1(包括 Dojo Toolkit SDK 1.10.3)开发的混合移动应用程序在升级到 iOS 10.3 后崩溃

将 IBM MobileFirst 平台服务器从 v7.1 升级到 v8.0 时出错

如何将两台 IBM MobileFirst Platform v7.1 服务器配置为一台 IBM http Web 服务器?

如何在单个 Mobile First v7.1 服务器实例中创建两个运行时

在 MobileFirst V8.0 中从后端系统调用