【问题标题】:PubNub iOS app doesn't receive push notificationsPubNub iOS 应用程序不接收推送通知
【发布时间】:2016-08-22 10:20:06
【问题描述】:

我在 iOS 8+ Xcode 7.3 上使用最新的 PubNub 试用版,试图构建一个聊天应用程序。我正在评估 PubNub 作为另一个聊天服务器的替代品。

我已按照 PubNub 文档中有关 Apple 推送通知的说明进行操作,但我的应用在后台时从未收到推送通知。

我创建了 p12 证书并将其导入到我的 PubNub 密钥集中。我在 Xcode 常规设置中启用了推送通知。我已经编写了 PubNub 文档中指定的 Swift 代码。我能够成功发布和订阅,但我的 application(application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData) 方法向我显示了一个“nil”令牌。

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate, PNObjectEventListener {
    var window: UIWindow?
    // Instance property
    var client: PubNub?

    // For demo purposes the initialization is done in the init function so that
    // the PubNub client is instantiated before it is used.
    override init() {

        // Instantiate configuration instance.
        let configuration = PNConfiguration(publishKey: "mypubkey", subscribeKey: "mysubkey")
        // Instantiate PubNub client.
        client = PubNub.clientWithConfiguration(configuration)
        super.init()
        client?.addListener(self)
    }

和:

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
// Override point for customization after application launch.
self.client?.subscribeToChannels(["my_channel"], withPresence: true)

let types: UIUserNotificationType = [.Badge, .Sound, .Alert]
let mySettings: UIUserNotificationSettings = UIUserNotificationSettings(forTypes:types, categories: nil)
UIApplication.sharedApplication().registerUserNotificationSettings(mySettings)
UIApplication.sharedApplication().registerForRemoteNotifications()

return true
}

在我的推送通知注册方法中:

func application(application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData) {
    NSUserDefaults.standardUserDefaults().setObject(deviceToken, forKey: "DeviceToken")
    NSUserDefaults.standardUserDefaults().synchronize()
    print("Device Token=\(NSString(data: deviceToken, encoding:NSUTF8StringEncoding))")
    self.client?.addPushNotificationsOnChannels(["my_channel"],
       withDevicePushToken: deviceToken,
       andCompletion: { (status) -> Void in
    ...
    })
}

print 方法显示 deviceToken 为 nil。

知道我做错了什么吗? 提前致谢。

【问题讨论】:

  • 正如在私人频道上所讨论的,获取 nil 令牌与 PubNub 无关。但是,如果您确实获得了一个有效的令牌,并且您在 PubNub 上注册了频道,但您仍然没有收到您的推送通知,请告诉我们。
  • 获得 nil 令牌时,您是在使用设备还是 sim 进行测试?您的配置是否正确?
  • 设备令牌由 Apple 提供(并由 PubNub 用于推送),但由 Apple 提供。如果您的配置不正确(或者您正在对 sim 进行测试),那么您的设备令牌将为 nil。请记住,模拟器永远不会收到设备令牌,因为它们不是设备。这是在 PubNub pubnub.com/docs/swift/… 中为您的应用配置推送通知的链接(Apple 对此也有很好的文章)

标签: ios swift pubnub


【解决方案1】:

您的注册码和设备令牌没有任何问题。设备令牌是二进制的,不能用 NSUTF8StringEncoding 编码转换成字符串。您可以使用断点来验证那里的值,但成功委托本身的调用证明您的应用程序从 Apple 收到了正确的设备推送令牌。

要接收推送通知,您需要使用适当的 publish 方法,这些方法允许您指定 APNS 负载。这是其中一种方法:https://www.pubnub.com/docs/swift/api-reference#publish_arg_6 payload 应设置为有效的 APNS 有效负载字典(根据 Apple 规范)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-12
    • 1970-01-01
    • 2013-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多