2016-04-27 212 views
0

我正在嘗試構建聊天應用程序的iOS 8+,Xcode 7.3上的PubNub的最新試用版。我正在評估PubNub作爲另一個聊天服務器的替代品。PubNub iOS應用程序不會收到推送通知

我已經按照PubNub文檔中關於Apple推送通知的說明進行了操作,但是我的應用在後臺從未收到推送通知。

我已經創建了p12證書並將其導入到我的PubNub密鑰集中。我在我的Xcode常規設置中啓用了推送通知。我已經編寫了PubNub文檔中指定的Swift代碼。我能夠成功發佈和訂閱,但我的應用程序(應用程序:UIApplication,didRegisterForRemoteNotificationsWithDeviceToken deviceToken:NSData)方法向我顯示'零'標記。

@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 
    ... 
    }) 
} 

的打印方法,讓我發現了deviceToken爲零。

任何想法我做錯了什麼? 在此先感謝。

+0

正如私人頻道所討論的,獲取一個零標記與PubNub無關。但是,如果您獲得了有效的令牌,並且您註冊了PubNub的頻道,但您仍然無法獲得推送通知,請告訴我們。 –

+0

當你得到零標記時,你正在測試一個設備還是一個SIM卡?你是否正確配置? –

+0

設備令牌由Apple提供(並由PubNub用於推送),但由Apple提供。如果您的配置不正確(或者您正在測試一個SIM卡),那麼您的設備令牌將爲零。請記住,模擬器永遠不會收到設備令牌,因爲它們不是設備。 以下是在PubNub中爲您的應用程序配置推送通知的鏈接https://www.pubnub.com/docs/swift/mobile-gateway#Retrieving_your_mobile_device_IDs(蘋果公司也有很棒的文章) – gurooj

回答

1

您的註冊碼和設備令牌沒有任何問題。設備令牌是二進制的,不能轉換爲字符串,編碼爲NSUTF8StringEncoding。您可以使用斷點來驗證有哪些值,但成功委託本身的調用證明了您的應用程序從Apple獲得了適當的設備推送令牌。

要接收推送通知,您需要使用適當的發佈方法,它允許你指定APNS有效載荷。這裏有一種方法:https://www.pubnub.com/docs/swift/api-reference#publish_arg_6有效載荷應設置爲有效APNS有效載荷字典(按Apple規範)。

相關問題