首页 文章

PubNub iOS应用程序不接收推送通知

提问于
浏览
0

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

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

我已经创建了p12证书并将其导入我的PubNub密钥集 . 我在Xcode常规设置中启用了推送通知 . 我编写了PubNub文档中指定的Swift代码 . 我能够成功发布和订阅,但我的应用程序(应用程序: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 .

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

1 回答

  • 1

    您不能使用NSUTF8StringEncoding编码转换为字符串 . 您可以使用断点来验证存在什么值,但调用成功委托本身就可以证明您的应用程序从Apple收到了正确的设备推送令牌 .

    要接收推送通知,您需要使用适当的 publish 方法,以便指定APNS有效负载 . 以下是方法之一:https://www.pubnub.com/docs/swift/api-reference#publish_arg_6 payload应设置为有效的APNS有效负载字典(按Apple规范) .

相关问题