2016-04-27 33 views
0

私は最新のiOS 8+、Xcode 7.3のPubNubの試用版で、チャットアプリを構築しようとしています。私は別のチャットサーバの代わりにPubNubを評価しています。PubNub iOSアプリはプッシュ通知を受け取りません

Appleプッシュ通知に関するPubNubドキュメントの指示に従ってきましたが、私のアプリはバックグラウンドでプッシュ通知を受け取ることはありません。

私はp12証明書を作成し、それを私のPubNubキーセットにインポートしました。 Xcodeの一般設定でプッシュ通知を有効にしました。私はSwiftコードをPubNubの文書で指定されているように記述しました。パブリッシュとサブスクライブは正常にできましたが、アプリケーション(アプリケーション: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 
    ... 
    }) 
} 

印刷方法はdeviceTokenがnilであることを私に示しています。

私が間違っていることを知っていますか? ありがとうございます。

+0

プライベートチャネルで説明したように、nilトークンを取得することはPubNubとは関係ありません。しかし、有効なトークンを取得してPubNubでチャンネルを登録してもプッシュ通知が表示されない場合は、私たちにお知らせください。 –

+0

nilトークンを取得したら、デバイスまたはsimでテストしていますか?あなたは適切に準備されていますか? –

+0

デバイストークンはAppleによって提供され(プッシュ用にPubNubによって使用される)、Appleによって提供されます。あなたのプロビジョニングが間違っている場合(またはsimでテストしている場合)、デバイストークンはゼロになります。シミュレータはデバイスではないため、デバイストークンを受け取ることはありません。 PubNub https://www.pubnub.com/docs/swift/mobile-gateway#Retrieving_your_mobile_device_IDsにプッシュ通知のためのアプリをプロビジョニングするためのリンクです(Appleはこれに関する素晴らしい記事もあります) – gurooj

答えて

1

デバイストークンだけでなく、登録コードにも問題はありません。デバイストークンはバイナリで、NSUTF8StringEncodingエンコーディングでは文字列に変換できません。ブレークポイントを使用して値が存在するかどうかを確認できますが、成功デリゲート自体の呼び出しは、アプリケーションがアップルから適切なデバイスプッシュトークンを受け取ったことを証明するものです。プッシュ通知を受信するには

、あなたは適切なはあなたがAPNSペイロードを指定できるようにするメソッドを公開使用する必要があります。ここにメソッドの1つがあります:https://www.pubnub.com/docs/swift/api-reference#publish_arg_6ペイロードは、APNSペイロード辞書(Apple仕様書ごと)に有効に設定する必要があります。

関連する問題