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

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

新規登録して質問してみよう
ただいま回答率
85.83%
iOS

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

バックグラウンド処理

バックグラウンド処理とは、マルチタスク環境において、ユーザーに対して前面に表示させている処理の裏側で実行させる処理のことを呼びます。バックグラウンド処理を行う事によって、ユーザーが他の作業に携わることが可能となります。

Xcode

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

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

[swift/iOS]バックグランド状態からフォアグランド状態へ遷移させたい

entaro12345
entaro12345

総合スコア62

iOS

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

バックグラウンド処理

バックグラウンド処理とは、マルチタスク環境において、ユーザーに対して前面に表示させている処理の裏側で実行させる処理のことを呼びます。バックグラウンド処理を行う事によって、ユーザーが他の作業に携わることが可能となります。

Xcode

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

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

2回答

0グッド

1クリップ

3758閲覧

投稿2019/12/12 01:08

編集2019/12/12 02:59

前提・実現したいこと

※少々実現したいことを修正しました。

アプリ起動時に定期実行処理(API呼び出し)を処理させて、
バックグラウンド時に遷移しても処理を続ける実装をしようとしています。
バックグラウンドに遷移後に、APIのレスポンスでNGが返ってきた場合に
フォアグラウンドに遷移させてアラートを表示したいのですが、
フォアグラウンドへの遷移の方法がわからないので教えていただきたいです。

※調べ方が悪くて欲しい情報にたどり着けていない可能性もありますが、教えて下さい。

該当のソースコード

AppDelegate

1import UIKit 2import Firebase 3//import FireBaseMessaging 4import UserNotifications 5 6@UIApplicationMain 7class AppDelegate: UIResponder, UIApplicationDelegate { 8 9 var window: UIWindow? 10 var viewController: ViewController! 11 var backgroundTaskID : UIBackgroundTaskIdentifier = UIBackgroundTaskIdentifier(rawValue: 100) 12 13 var sDeviceToken : String! 14 var bPost = false 15 16 func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { 17 FirebaseApp.configure() 18 19 //Messaging.messaging().delegate = self as MessagingDelegate 20 21 if #available(iOS 10.0, *) { 22 UNUserNotificationCenter.current().delegate = self as! UNUserNotificationCenterDelegate 23 24 UNUserNotificationCenter.current().requestAuthorization(options: [.sound, .alert, .badge], completionHandler: {_, _ in }) 25 // プッシュ通知の登録 26 application.registerForRemoteNotifications() 27 } else { 28 // iOS10未満のためプッシュ通知しない 29 } 30 return true 31 } 32 33 // プッシュ通知受信時、プッシュ通知タップ時 34 func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) { 35 36 switch application.applicationState { 37 case .inactive: // バックグラウンド状態でプッシュ通知から起動したとき 38 if (userInfo[AnyHashable("URL")] != nil) { 39 // 画面遷移 40 let sUrl = userInfo["URL"] 41 //viewController.ReqesutURL(sUrl) 42 } 43 break 44 case .active: // アプリ起動時にプッシュ通知を受信したとき 45 // バッジデクリメント 46 DispatchQueue.main.async { 47 UIApplication.shared.applicationIconBadgeNumber = UIApplication.shared.applicationIconBadgeNumber + 1 48 } 49 break 50 case .background: // バックグラウンド状態でプッシュ通知を受信したとき 51 break 52 default: 53 break 54 } 55 // バッジデクリメント 56 DispatchQueue.main.async { 57 UIApplication.shared.applicationIconBadgeNumber = UIApplication.shared.applicationIconBadgeNumber - 1 58 } 59 completionHandler(UIBackgroundFetchResult.newData) 60 } 61 62 // デバイストークン取得時イベント 63 func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) { 64 65 InstanceID.instanceID().instanceID { (result, error) in 66 if let error = error { 67 print("Error fetching remote instance ID: (error)") 68 } else if let result = result { 69 // 変更があれば、APIを使用して送信 70 if (self.sDeviceToken != nil && self.sDeviceToken != result.token) { 71 self.sDeviceToken = result.token 72 //self.viewController.postAsync() 73 self.bPost = true 74 } else { 75 self.sDeviceToken = result.token 76 } 77 print("DeviceToken: (result.token)") 78 } 79 } 80 } 81 82 // バックグラウンド遷移直前に呼ばれる 83 func applicationWillResignActive(_ application: UIApplication) { 84 self.backgroundTaskID = application.beginBackgroundTask(){ 85 [weak self] in 86 application.endBackgroundTask((self?.backgroundTaskID)!) 87 self?.backgroundTaskID = UIBackgroundTaskIdentifier.invalid 88 } 89 } 90 91 func applicationDidEnterBackground(_ application: UIApplication) { 92 // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. 93 // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. 94 } 95 96 func applicationWillEnterForeground(_ application: UIApplication) { 97 // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background. 98 } 99 100 // アプリがアクティブになるたびに呼ばれる 101 func applicationDidBecomeActive(_ application: UIApplication) { 102 application.endBackgroundTask(self.backgroundTaskID) 103 } 104 105 // アプリ終了時イベント 106 func applicationWillTerminate(_ application: UIApplication) { 107 // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. 108 } 109}

ViewController

1import UIKit 2 3class ViewController: UIViewController { 4 5 var timer = Timer() 6 7 override func viewDidLoad() { 8 super.viewDidLoad() 9 10 dispAlert() 11 } 12 13 @objc func dispAlert() { 14 if self.timer.isValid { 15 self.timer.invalidate() 16 } 17 self.timer = Timer.scheduledTimer(timeInterval: 15, target: self, selector: #selector(updating), userInfo: nil, repeats: true) 18 19 let alert = UIAlertController(title: "テスト", message: "バックグラウンド", preferredStyle: .alert) 20 let confirmAction: UIAlertAction = UIAlertAction(title: "アラート", style: .default, handler:nil) 21 alert.addAction(confirmAction) 22 self.present(alert, animated: true, completion: nil) 23 } 24}

補足情報(FW/ツールのバージョンなど)

MacOS HighSierra
Swift 3
Xcode 10.1

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

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

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

下記のような質問は推奨されていません。

  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

takabosoft

2019/12/12 01:54

そういうアプリを見たことがありますか? ローカル通知をして、それをユーザーにタップさせてアプリを起動させることはできると思いますが、それ以外の方法で勝手にフォアグラウンドに来るアプリは私はみたことがありません。 むしろローカル通知をアラート代わりにするのがベストな気もします。
entaro12345

2019/12/12 02:51

ないですね。 定期的にAPI通信をして、APIのレスポンスでNGがあれば、フォアグラウンドにしてアラートしたかったのですが、やはり無理なのですかね?

回答2

0

ベストアンサー

stackoverflowでも出来ないという回答がありましたので、リンクを張っておきます。

How to bring application to foreground in ios?
https://stackoverflow.com/questions/22930259/how-to-bring-application-to-foreground-in-ios

投稿2019/12/12 03:34

takabosoft

総合スコア8341

下記のような回答は推奨されていません。

  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

回答へのコメント

entaro12345

2019/12/12 05:18

ありがとうございます。 ユーザーアクションが必要ということがわかりました。

0

ユーザーのインターアクションなしで、フォアグランド状態へ遷移するのは不可能です。

解決方法は:

投稿2019/12/12 02:55

vanderlvov

総合スコア683

下記のような回答は推奨されていません。

  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

回答へのコメント

entaro12345

2019/12/12 05:17

ありがとうございます。 やはり何かしらユーザーアクションがないと不可なのですね。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.83%

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

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

質問する

関連した質問

同じタグがついた質問を見る

iOS

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

バックグラウンド処理

バックグラウンド処理とは、マルチタスク環境において、ユーザーに対して前面に表示させている処理の裏側で実行させる処理のことを呼びます。バックグラウンド処理を行う事によって、ユーザーが他の作業に携わることが可能となります。

Xcode

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

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています