2017-07-19 4 views
0

didReceiveRemoteNotificationでアプリ(firebase)で通知を送信しています。ユーザーをアプリの新しい場所(タブコントローラの内側にあるナビゲーションコントローラの1つにあるビューコントローラ)に誘導しています。どのように私はそれをインスタンス化(再読み込み)せずにApp Delegateのルートコントローラとしてタブコントローラを設定できますか?

私のタブコントローラーの最初のビューでは、ユーザーがロケーションサービスとプッシュ通知ビューコントローラー(これは許可または拒否の許可)を経由している場合、常にUserDefaultsがチェックされます。ユーザがこれらのビューコントローラを初めて使用したとき(アプリケーションを起動したときなど)には、適切なビューコントローラ(画像の1と2のセグ)に分割されます。問題は、位置情報サービスまたはプッシュ通知ビューコントローラに接続すると、私のdidReceiveRemoteNotification内のタブバーコントローラの参照が機能していないように見えるということです。これは、通知を押すと、ユーザーが位置情報サービスまたはプッシュ通知にあった場合、タブコントローラを適切にナビゲートしないことを意味します。ユーザーがロケーションサービスまたはプッシュ通知を一度も実行しなければならない場合は、機能します。そのため、ユーザーが何らかの理由でルートコントローラーを使用している場合、ルートコントローラーがこれらのいずれかに切り替わると考えられます。

平易でシンプルなので、私のAppDelegateで動作するように私のタブバーコントローラリファレンスが必要です。ユーザーが位置情報サービスまたはプッシュ通知を通過したときにはなぜ機能しないのですか?ここに私のコードは次のとおりです。

func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable: Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) { 
    let state = UIApplication.shared.applicationState 
    if(state == .active) { 
     // Create local notification 
    } else { 
     if let businessID = userInfo["business_id"] as? String { 
      Globals.notificationBusinessId = Int(businessID)! 
     } 
     if let businessName = userInfo["business_name"] as? String { 
      Globals.notificationBusinessName = "\(businessName)" 
     } 
     if let itemID = userInfo["item_id"] as? String { 
      Globals.notificationItemID = Int(itemID)! 
     } 
     if let navigationLevel = userInfo["navigation_level"] as? String { 
      Globals.notificationNavigationLevel = Int(navigationLevel)! 
     } 
     Globals.popToBusinessesController = true 

     myTabBar.selectedIndex = 1 
     myTabBar.selectedIndex = 2 
    } 
} 

Image

答えて

0

あなたは通知didReceiveRemoteNotificationにタップすると、これはアプリがアクティブになったときに通知を受け取る場合にのみ呼び出され、呼び出されません。 リモート通知が届いたときにアプリが実行されていない場合、メソッドはアプリを起動して、起動オプション辞書に適切な情報を提供します。

あなたははいこの部分は私のために働いているすべてのhere

+0

を確認することができます。アプリが閉じられているときに通知が押されると、アプリを開き、正しい画面にナビゲートします。問題は、アプリで、ユーザーが位置情報サービスまたはプッシュ通知を通過するときに、タブバーコントローラの参照が乱れることです。この場合、ユーザーが通知を押すと、何もしません。ただし、ユーザーが位置情報サービスとプッシュ通知を実行しなかった場合、タブバーコントローラは期待どおりに動作しているようです。 –

+0

私は、アプリが最初に起動されたときのように、位置情報サービスまたはプッシュ通知がユーザーに提示されたときに通知が機能しない理由について混乱しています。しかし、他の時間は、彼らはします。私は、タブバーが正しくナビゲートしていないことを意味します。それはいつも期待どおりdidReceiveRemoteNotificationに入ります。 –

+0

うーん、コード内に 'if(state == .active)...'と書かれていると、ユーザーがアプリにいれば何も起こりません。 – tbilopavlovic

関連する問題