2016-06-13 2 views
1

私は奇妙な問題があります。iOS APNが届きません

コードが通知をregistrateする以下の通りです:

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { 
    // PUSH NOTIFICATION 

    let notificationTypes: UIUserNotificationType = [UIUserNotificationType.Alert, UIUserNotificationType.Badge, UIUserNotificationType.Sound] 
    let pushNotificationSettings = UIUserNotificationSettings(forTypes: notificationTypes, categories: nil) 

    application.registerUserNotificationSettings(pushNotificationSettings) 
    application.registerForRemoteNotifications() 

および通知を処理するために:

func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject], fetchCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void) { 

    let notification = UILocalNotification() 
    notification.soundName = UILocalNotificationDefaultSoundName 
    notification.alertBody = "TEST" 
    application.presentLocalNotificationNow(notification) 

私は(デバイスではなく、シミュレータと)Xcodeで、この単純なコードをテストする場合、問題ない。しかし、xcodeを使わずに(私の電話で)テストすると、ローカルの通知は表示されません。音声はありません。アラートはありません。バッジはありません。

アプリがバックグラウンドで実行されているときに問題が発生します。

送信されるAPNはサイレント通知です。

これを修正するにはどうすればよいですか?

EDIT

I 5にサイレントAPNの優先度を減少させることによってそれを解決しました。

+0

アプリがバックグラウンドで実行されているときに問題が発生します。 – Thomi

+0

** xcodeなしでテストするとどういう意味ですか? – Dershowitz123

+0

私はデバッグをしないでください。私はちょうどそれをテストするために私の携帯電話でアプリを実行します。 – Thomi

答えて

0

最後に問題が見つかりました。私の編集をご覧ください。サイレントAPNを(それが1からcontent-availableセットを意味します)送信すると

、APN priorityは5と ない10でなければなりません。

0

よくxcode経由でインストールすると、開発(gateway.sandbox.push.apple.com)URLで通知が機能します。 ipa(アドホック)としてエクスポートして手動でインストールするには、プロダクションURL gateway.push.apple.com(プロダクションキーを含む)から送信する必要があります。したがって、両方のキーを作成する必要があります。次に、xcodeで作業しているときには開発用urlで、エクスポートされたipaからインストールするときにはプロダクションで通知を送信できます。

+0

APNの生産証明書が必要ですか?しかし、私のアプリはまだ開発中ではなく、アプリストアではなく、開発者証明書で署名されています。 – Thomi

+0

Xcodeを使用してアプリケーションをインストールしていない場合は、プロダクションプロファイルとプロダクション証明書が必要です(ここでは想定されていません)。 – Gruntcakes

+0

このアプリはXcodeを使ってインストールされているので、その場合はプロダクションプロファイルとプロダクション証明書は必要ありません。 – Thomi

0

すでにXcode経由でアプリを実行している場合は、事前にトークンをデフォルトに保存しています。したがって、再度実行すると、if文でラップしたときにregisterForRemoteNotifications()が呼び出されることはありません。

アプリケーションが起動するたびにregisterForRemoteNotifications()を呼び出す必要があります(また、トークンが固定値であると仮定しないで、変更することもできます)。

+0

はい、私の最初のアイディアでしたが、トークンがすでに格納されていても問題はまだ残っていてもregisterForRemoteNotifications()を呼び出そうとしました。とにかく、私はトークンが固定値ではないと仮定します。あなたはこの時点で本当に正しいです。 – Thomi

+0

あなたが送信しようとしている、つまりユーザーに向けたプッシュのタイプ、またはアプリに向けたサイレントプッシュのタイプは何ですか?後者の場合は、デバイスを電源に接続していますか? (私は奇妙に聞こえるが、私には理由があると信じている)。 – Gruntcakes

+0

これはサイレントプッシュであり、はい、デバイスは電源(MacBookのUSBプラグ)に接続されています。 – Thomi

0

プロダクション(アドホック)にコンパイルしてXcodeからデプロイする際に、デバイスのトークンが変更されます。 これを参照してくださいanswer

+0

はい、あなたは正しいです。しかし、私はdeviceTokenが問題の起源だとは思わない。アプリケーションが起動されるたびに通知が発行されるたびに 'application.registerForRemoteNotifications()'を呼び出すif条件を削除しました。 – Thomi

関連する問題