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

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

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

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

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

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

Q&A

3回答

6602閲覧

iOSアプリでバックグランド時でも指定した関数を実行したい。

mm--_--mm

総合スコア113

Objective-C

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

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

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

1グッド

1クリップ

投稿2016/01/21 02:59

いつもお世話になっております。
表題の件ですが、アプリがバックグラウンド状態時でも、フォアグラウンド時にサーバから通知があった時に呼ばれる関数を呼び出せるようにしたいと考えています。

具体的には、バックグラウンド状態でもサーバから通知(相手からメッセージが送られてきた時)が来た場合、それを検知してローカルプッシュを使用してユーザーに知らせるという処理をしたいと思っています。

バックグラウンドについて調べてみたのですが、バックグラウンドかフォアグラウンドになるか確認したりバックグラウンドになったら等、一回限り?(自分の認識では)しか処理しないという情報しか見つける事ができませんでした....

この問題の解決方法が解る方おりましたら教えていただけると幸いです。
よろしくお願いいたします。

SatoTakeshiX👍を押しています

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

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

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

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

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

guest

回答3

0

Background Fetchは使えませんかね?
iOSでバックグラウンドにアプリが来ても一定時間でメソッドを実行できる機能です。
参考になればと思います!
http://qiita.com/griffin_stewie/items/8371c09059b3ba7bb202

投稿2016/01/22 17:02

SatoTakeshiX

総合スコア113

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

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

mm--_--mm

2016/01/23 04:37

ご回答いただきありがとうございます! backgroundfechというものがあるんですね! 自分でも調べて試してみます!
guest

0

iOSではバックグラウンドになると一部の例外を除き処理を実行することはできなくなります。
(バックグラウンドになる前に開始した処理や通信は続けることはできますが、求める方法ではないと思います)
その一部の例外とは、

iOSアプリケーション プログラミングガイド P35 より

iOSでバックグラウンド動作が許されるのは、次の種類のアプリケーションだけです。
● 音楽プレーヤーのように、バックグラウンドで音声を再生するアプリケーション
● バックグラウンドで音声を録音するアプリケーション
● ナビゲーションのように、常に位置情報を知らせるアプリケーション
● VoIP(Voice over Internet Protocol)対応アプリケーション
● 定期的に最新号をダウンロードして処理する必要があるアプリケーション
● 外付けアクセサリから定期的に更新情報を受け取るアプリケーション

となっています。

目的のアプリはこのどれかに該当するでしょうか?
もし該当しない場合、仮に実装したとしても残念ながら申請したときにリジェクトされる可能性が高いです。
該当する場合、下の参考リンクに従って実装すればよろしいかと思います。

参考:
App Programming Guide for iOS
https://developer.apple.com/library/ios/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/BackgroundExecution/BackgroundExecution.html
日本語ドキュメント(ここの"iOSアプリケーション プログラミングガイド"の"バックグラウンド実行"セクション)
https://developer.apple.com/jp/documentation/

投稿2016/01/21 07:20

u39ueda

総合スコア950

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

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

mm--_--mm

2016/01/22 06:18

ご回答いただきありがとうございます。 そして返信が遅れてしまい申し訳ありません。 音声のやり取りをするアプリを作成していて(しかしVoIPではない)、受話口とスピーカーから音声を出力したいと考えています。さらにバックグラウンド状態でも音声を流したいと考えているので、音楽プレイヤーという設定をすればできるのでしょうか? というかこちらで音楽プレイヤーという設定で申請してもそれを認めるか認めないかappleのさじ加減ということなんでしょうかね?
guest

0

現状の把握がいまいちできません。

サーバから通知

Push通知と読み解きましたが機能の実装はされているのでしょうか?

具体的には、バックグラウンド状態でもサーバから通知(相手からメッセージが送られてきた時)が来た場合、
それを検知してローカルプッシュを使用してユーザーに知らせるという処理をしたいと思っています。

端末にサイレント通知を送り、それをアプリで検知し、アプリから端末にローカルプッシュ通知を送る
ということでしょうか?
そもそも、アプリがバックグラウンド状態の時にPush通知は受信出来ているのでしょうか?

もう少し具体的に書いてもらえればと思います。

投稿2016/01/21 04:22

u.-_-.u

総合スコア59

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

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

mm--_--mm

2016/01/21 04:29

ご回答いただきありがとうございます。 サーバから通知というのはpush通知ではなく独自で作成したメッセージのやり取りが出来る機能(チャットのようなもの)の中で、相手からメッセージが送られてきた時の事をサーバからの通知と記述しています。伝わりにくくてもうしわけありません... >具体的には、バックグラウンド状態でもサーバから通知(相手からメッセージが送られてきた時)が来た場合、 >それを検知してローカルプッシュを使用してユーザーに知らせるという処理をしたいと思っています。 というのは相手からメッセージ(なにかしらの文字列)が送信されてそれを受けとる関数が呼ばれた時にアプリがバックグラウンド状態ならローカルプッシュを使用してユーザーに知らせるという意味になります...
u.-_-.u

2016/01/21 05:08 編集

こちらこそ読解力がなく申し訳ありません。 以下でアプリの状態を取得出来ます。 UIApplicationState applicationState =  [[UIApplication sharedApplication] applicationState]; アクティブ/バックグラウンド状態の時はそれぞれ以下のものが返ってきます。 アクティブ:UIApplicationStateActive バックグラウンド:UIApplicationStateBackground if分等で判断してあげてください。 if (applicationState == UIApplicationStateActive) 参考URL HugKey.com 「iOSアプリの状態を確認する。起動中なのかバックグラウンドなのか。」 http://www.hugkey.com/176/ -追記- リファレンス見て来ましたが以下の3つが状態として定義されているようです。 UIApplicationStateActive UIApplicationStateInactive UIApplicationStateBackground Apple Developer 「UIApplicationState」 https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIApplication_Class/#//apple_ref/c/tdef/UIApplicationState
mm--_--mm

2016/01/21 05:15

ありがとうございます。 このバックグラウンドかどうかを判別する処理を相手からのメッセージを受けとる関数内で実行しているのですがフォアグラウンド状態では判別できるものの、バックグラウンド状態ではメッセージを受けとる関数自体呼ばれないので判別することができませんでした...
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問