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

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

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

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

Swift

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

Q&A

1回答

7153閲覧

アプリを起動していない場合にPUSHを受け取った際の画面遷移

arsro

総合スコア24

iOS

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

Swift

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

0グッド

1クリップ

投稿2016/02/13 13:45

アプリを起動していないときにPUSH通知を受け取り、通知領域をタップしてアプリを起動したときに、画面遷移させたいのですが、現状その方法がわからず困っています。

ログインしているかの情報をデバイスに保存しており、もしログインしていなければログイン画面に遷移

以下のサイトなども参考にしました。
参考

swift

1 func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { 2 3 //// アプリ起動時処理 4 // 最初の画面を準備 5 self.window = UIWindow(frame: UIScreen.mainScreen().bounds) 6 7 // ログイン判定 8 let defaults = NSUserDefaults.standardUserDefaults() 9 let isLogin: Bool? = defaults.objectForKey("isLogin") as? Bool 10 11 12 // 未ログインの場合 13 if isLogin == nil || !isLogin! { 14 //ログイン画面に遷移 15 let storyboard = UIStoryboard(name: "Login", bundle: nil) 16 self.loginNavigationController = storyboard.instantiateViewControllerWithIdentifier("LoginNavigationController") as! UINavigationController 17 self.window?.rootViewController = self.loginNavigationController 18 self.window?.makeKeyAndVisible() 19 20 } 21 // ログイン中の場合 22 else { 23 //PUSH通知経由でアプリを起動した場合 24 if(launchOptions == nil){ 25 let storyboard = UIStoryboard(name: "Ctab", bundle: nil) 26 self.CtabNavigationController = storyboard.instantiateViewControllerWithIdentifier("CtabNavigationController") as! UINavigationController 27 self.window?.rootViewController = self.CtabNavigationController 28 self.window?.makeKeyAndVisible() 29 }else{ 30 //PUSH通知ではなく、アイコンをタップしてアプリを開いた場合 31 let storyboard = UIStoryboard(name: "TabBarController", bundle: nil) 32 self.tabBarViewController = storyboard.instantiateViewControllerWithIdentifier("TabBarController") as! UITabBarController 33 self.window = UIWindow(frame: UIScreen.mainScreen().bounds) 34 self.window?.rootViewController = self.tabBarViewController 35 self.window?.makeKeyAndVisible() 36 } 37 } 38 39 //省略 40 41 //アイコンバッチを0にする 42 UIApplication.sharedApplication().applicationIconBadgeNumber = 0 43 44 return true 45

なにかありましたら、随時補足させていただきますので、

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

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

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

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

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

guest

回答1

0

参考にしたサイトの回答の【3の処理】に書かれてある通り、launchOptionsの中にUIApplicationLaunchOptionsLocalNotificationKeyが入っていればプッシュ通知で起動されたと判断して、通常の起動とは別の画面に遷移するよう処理すればよいだけだと思うのですが、何がわからないんですか?

投稿2016/02/13 16:08

TakeOne

総合スコア6299

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

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

arsro

2016/02/13 16:30

現在以下の部分で、その処理を行っているのですが、 //PUSH通知経由でアプリを起動した場合 if(launchOptions == nil){ let storyboard = UIStoryboard(name: "Ctab", bundle: nil) self.CtabNavigationController = storyboard.instantiateViewControllerWithIdentifier("CtabNavigationController") as! UINavigationController self.window?.rootViewController = self.CtabNavigationController self.window?.makeKeyAndVisible() } これにしても起動状態でないアプリをPUSHを通知経由で起動させると アプリ自体が落ちてしまいます。 printなどでデバッグしたいのですが、一度アプリをバックグラウンドでも動いていない状態にするために、デバッグできない状態で原因を見つけることができないです。
TakeOne

2016/02/13 17:28 編集

launchOptionsがnilのケースはPUSH通知でない通常の起動です。コード内のコメントと判断条件が一致していないように見えるのですが、そのコードは意図通りですか?また、参考サイトはlaunchOptionsがnilでないことを確認した上で、さらにUIApplicationLaunchOptionsLocalNotificationKeyが存在していることを確認した場合にPUSH通知からの起動だと判断していると思うのですが、それをしていないのはなぜですか? PUSH通知による起動処理の部分をデバッグするのは確かに難しいですが、NSLog()で情報を出力するようにしておいて、[Window]-[Devices]で実機iPhoneのコンソールメッセージを見ればPUSH通知からの起動時の実行状況を見ることができます。(printだとコンソールにメッセージは出力されないようですが、NSLogなら出力されます。NSLogはswiftでも使えます。)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問