【发布时间】: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 对此也有很好的文章)