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 MObile First 中的推送通知:哪个更适合发送推送通知、MobileFirst Operations Console 或通过 REST API