Swift 中的 IBM Silverpop 推送集成

Posted

技术标签:

【中文标题】Swift 中的 IBM Silverpop 推送集成【英文标题】:IBM Silverpop push integration in Swift 【发布时间】:2018-07-13 18:35:38 【问题描述】:

我需要将一个用 Objective-C 编写的旧应用迁移到 Swift。 此应用程序使用 IBM 解决方案 Silverpop 进行推送通知。

我在使用 Silverpop 解决方案的迁移过程中遇到了一些问题。 该框架是用 Objective-C 编写的,当我按照 GitHub 上的文档或示例(文档和示例之间存在差异..)时,我无法让应用程序运行。

应用程序在文档要求我创建的main.swift 中崩溃:

import Foundation
import UIKit

UIApplicationMain(CommandLine.argc, nil, nil, "MCEAppDelegate")

应用程序在启动时崩溃:

Thread 1: EXC_BAD_ACCESS (code=1, address=0x8)

文档:https://developer.ibm.com/customer-engagement/tutorials/getting-started-mobile-app-messaging-ios-apps/

示例:https://github.com/ibm-mobile-push/ios/tree/master/samples/Swift%20Automatic%20Sample/SwiftSample

我的 MceConfig.json


    "baseUrl": "https://api.ibm.xtify.com/3.0/",
    "appKey": 
        "dev":"xxxx",
        "prod":"xxxx"
    ,
    "appDelegateClass": "AppDelegate",
    "autoInitializeFlag": true,
    "sessionTimeout": 20,
    "metricTimeInterval": 180,
    "loglevel": "verbose",
    "logfile": false

任何帮助将不胜感激!

【问题讨论】:

控制台崩溃时会说什么? 除了 EXC_BAD_ACCESS 什么都没有。我发现这个问题可能与 Objective-C 错误的内存访问有关。但我不知道如何修复它,因为它不是我的代码,而是 IBM 框架代码。 根据文档,你需要这么多设置。你做对了吗?请出示您的 MceConfig.json(当然不包括 appKey)。 在 UIApplicationMain 中,第一个参数是传递给函数的命令行参数的计数。第二个参数应该是这些参数的列表。在这种情况下,如果 CommandLine.argc 大于零,则第二个参数不应为 nil。会是这样吗?如果将 CommandLine.argc 替换为 0 会发生什么? @ScottThompson 黑屏为0,与github示例中main.swift内容相同。 【参考方案1】:

您的 MceConfig.json 未遵循示例代码中的文档和注释。

Setting up the sample app that is included in the Mobile App Messaging SDK for iOS.

    Swift 要求您的类位于命名空间中。因此,如果您使用的是 Swift 示例应用程序,请更新“appDelegateClass” 值为“SwiftSample.AppDelegate”。

示例代码中的MceConfig.json:

"Please note: if you are using a Swift based Application Delegate you must include the product name and class name in AppDelegateClass, for example": "SwiftSample.AppDelegate",
"appDelegateClass": "AppDelegate",

尝试更改 MceConfig.json 中的行 来自:

"appDelegateClass": "AppDelegate",

收件人:

"appDelegateClass": "YourAppProductName.AppDelegate",

(将YourAppProductName替换为您应用的实际产品名称。)

【讨论】:

已经尝试过了,没有任何改变。我认为这不是配置错误,如果是这种情况,我将有 SDK init 尝试加载 MceConfig 的日志,不是吗? @EmmanuelLoisance,据我测试,给 MceConfig.json 赋予错误的价值是让我的应用程序在启动时崩溃的唯一方法。您的设置或代码中可能存在其他错误,但请记住,您需要将正确的值保留为"appDelegateClass",如上所述。 我复制并粘贴 MceConfig.json 内容,更新 appDelegateClass 和密钥,尝试将 MceConfig.json 移入和移出产品文件夹.. 没办法。我使用 Pods 来获取 Silverpop 框架,还有一些事情要做吗? 抱歉,我没用过Pods,所以我不能说使用Pods有没有影响。无论如何,类MCEAppDelegate 加载MceConfig.json,然后实例化使用appDelegateClass 获取的类。您的应用程序在此过程中的任何位置都停止。找不到MCEAppDelegate 的类定义,或者MceConfig.json 已损坏或未包含在您的应用程序包中,或者...考虑所有这些并一一检查。

以上是关于Swift 中的 IBM Silverpop 推送集成的主要内容,如果未能解决你的问题,请参考以下文章

IBM Bluemix 中的推送通知注册选项卡位置

IBM MObile First 中的推送通知:哪个更适合发送推送通知、MobileFirst Operations Console 或通过 REST API

IBM Worklight:推送通知行为

IBM Worklight - 可靠的推送通知

IBM Worklight:iOS 推送通知长度限制

IBM Worklight:推送通知设备 ID