質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Objective-C

Objective-Cはオブジェクト指向型のプログラミング言語のひとつです。C言語をベースにSmalltalkが取り入れられています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Q&A

解決済

1回答

2591閲覧

アプリケーションがバックグラウンドの時、Remote Notificationが動作しない(デバッグ時以外)

sirosiro

総合スコア26

Objective-C

Objective-Cはオブジェクト指向型のプログラミング言語のひとつです。C言語をベースにSmalltalkが取り入れられています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

0グッド

0クリップ

投稿2016/08/23 23:28

編集2016/08/23 23:55

iPadアプリ内でRemoteNotificationでサーバからPush通知を受けた後に、ダウンロードを行ってCoreData内を最新の状態にする処理を組み込んでおります。
証明書などの手続きを一通り終わらせて、XCodeのデバッグアプリを実行しPush通知を受けた後にダウンロード処理が動くことも確認しました。
この際に、

  • フォアグラウンド時 ... OK
  • バックグラウンド時 ... OK

それぞれにおいて実行されることを確認しました。
ところが、XCodeによるデバッグではなくiPadからアプリを起動し、一旦Homeボタンを押してバックグラウンドにさせた後にPush通知を送ると反応がありません。これがフォアグラウンドの場合はうまくいきます。

  • フォアグラウンド時 ... OK
  • バックグラウンド時 ... NG

CapabilitiesのBackground ModesはONです。
Background fetchはON。
RemoteNotificationはON。
InfoのRequired background modesのApp downloads contents from the network設定はあります。
InfoのRequired background modesのApp downloads content in response to push notification設定はあります。

Remote Notificationの登録はwillFinishLaunchingWithOptions内で以下を行っております。

c

1 2flgNotifiType = 3 UIUserNotificationTypeBadge | 4 UIUserNotificationTypeSound | 5 UIUserNotificationTypeAlert; 6objNotifiSetting = [UIUserNotificationSettings settingsForTypes:flgNotifiType 7 categories:nil]; 8[application unregisterForRemoteNotifications]; 9[application registerUserNotificationSettings:objNotifiSetting]; 10[application setMinimumBackgroundFetchInterval:UIApplicationBackgroundFetchIntervalMinimum]; 11

以下のサイトを参考に、
【iOS7】プッシュ通知のバックグラウンド処理でハマったメモ
[application unregisterForRemoteNotifications];を入れております。
このサイトではiOS7なので若干違っており、UIRemoteNotificationTypeNewsstandContentAvailabilityがないのが気になっております。iOS8の場合はこれに該当するものがありませんでした。

サーバ側はrubyのgem「Grocer」を使っております。

ruby

1 2# 以下の方法と、 3notification = Grocer::Notification.new( 4 device_token: "fe15a27d5df3c34778defb1f4f3880265cc52c0c047682223be59fb68500a9a2", 5 alert: "Hello from Grocer!", 6 badge: 42, 7 category: "a category", # optional; used for custom notification actions 8 sound: "siren.aiff", # optional 9 expiry: Time.now + 60*60, # optional; 0 is default, meaning the message is not stored 10 identifier: 1234, # optional; must be an integer 11 content_available: true, # optional; any truthy value will set 'content-available' to 1 12 mutable_content: true # optional; any truthy value will set 'mutable-content' to 1 13) 14pusher.push(notification) 15 16# 以下の方法の両方試しましたが、結果は同じでした。 17 18notification = Grocer::NewsstandNotification.new(device_token: "...") 19pusher.push(notification)

同様の現象に出くわして解決された方はいらっしゃいませんか?
iOS (iPad) 8.4.1(12H321)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

自己解決?しました。

iPadをセルラー接続だけにしていましたが、WiFi接続をするとBackground Notificationが行われました。これはNSURLSessionConfigurationのallowsCellularAccessがtrueにされている状態です。

まとめると以下のようになります。
XCodeでのデバッグ時(セルラー回線・WiFi共に)

  • フォアグラウンド ... OK
  • バックグラウンド ... OK

通常使用時(セルラー接続)

  • フォアグラウンド ... OK
  • バックグラウンド ... NG

通常使用時(WiFi接続)

  • フォアグラウンド ... OK
  • バックグラウンド ... OK

StackOverflowなどにはケーブルを接続して充電している状態であればBackground Notificationが処理されるという話も出ていましたが、ケーブルを繋いでいない状態でも行われました。ただし、今はバッテリーはフル充填なので残量も条件に入っているのかも知れません。(例えば残量が少ない時はケーブル接続がBackground Notificationの発動条件に入るとか)

あと、このBackground Notification発動条件を発見する前はアプリのバックグラウンド更新(設定 - Appのバックグラウンド更新)で全体をオン・オフにしたり、自分のアプリをオン・オフにしたりしてましたので、うまく動かなかった人はこれをやってみるのもありかと思います。

投稿2016/08/24 19:09

sirosiro

総合スコア26

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問