【问题标题】:Opening notification in a detailed controller在详细控制器中打开通知
【发布时间】:2017-06-26 09:46:50
【问题描述】:

我在我的项目中使用 FireBase,并收到主题通知。就像点击通知打开并将数据传递给详细控制器时一样。

例如在 BBC 新闻节目中

这是故事板

import UIKit  
import UserNotifications  
import Firebase  
import FirebaseInstanceID  
import FirebaseMessaging  
import SystemConfiguration

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate , UNUserNotificationCenterDelegate, MessagingDelegate{

var window: UIWindow?    

func messaging(_ messaging: Messaging, didRefreshRegistrationToken fcmToken: String) {
    print("Firebase registration token: \(fcmToken)")
}

func application(_ application: UIApplication,
                 didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
    Messaging.messaging().apnsToken = deviceToken as Data
}

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

    if #available(iOS 10.0, *) {
        // For iOS 10 display notification (sent via APNS)
        UNUserNotificationCenter.current().delegate = self

        let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound]
        UNUserNotificationCenter.current().requestAuthorization(
            options: authOptions,
            completionHandler: {_, _ in })
    } else {
        let settings: UIUserNotificationSettings =
            UIUserNotificationSettings(types: [.alert, .badge, .sound], categories: nil)
        application.registerUserNotificationSettings(settings)
    }

    application.registerForRemoteNotifications()


    DispatchQueue.main.async {

        Messaging.messaging().subscribe(toTopic: "news")
    }

    FirebaseApp.configure()


    return true
 }
}

【问题讨论】:

    标签: ios swift firebase push-notification notifications


    【解决方案1】:

    Refer This

    你需要重定向到你特定的详细视图控制器

    【讨论】:

    【解决方案2】:

    试试这个

    在 didFinishLaunchingWithOptions 方法中添加此代码

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    
    if let notification = launchOptions?[.remoteNotification] as? [String: AnyObject] {
            let aps = notification["aps"] as! [String : AnyObject]
    
            let storybaord = getStoryboardObject(storyboardName: "Main")as UIStoryboard
            let aboutUsObj = storybaord.instantiateViewController(withIdentifier: "NotificationViewController")as! NotificationViewController
            aboutUsObj.aps = aps
            let navigationController: UINavigationController? = (AppDelegate.getDelegate().window?.rootViewController as? UINavigationController)
            navigationController?.pushViewController(aboutUsObj, animated: true)
        }
    
        return true
    }
    

    在 AppDelegate 类中添加此代码

    获取 StoryBoardObject

    func getStoryboardObject(storyboardName:String) -> UIStoryboard {
    
        let storyboard = UIStoryboard(name: storyboardName as String, bundle: nil)
    
        return storyboard
    
    }
    

    获取 AppdelegateObject

    class func getDelegate() -> AppDelegate {
        return UIApplication.shared.delegate as! AppDelegate
    } 
    

    【讨论】:

    • 你已经使用 NavigationController 作为 rootView Controller 来使用:
    • 让 navigationController: UINavigationController? = (AppDelegate.getDelegate().window?.rootViewController as?UINavigationController) navigationController?.pushViewController(aboutUsObj, animated: true)
    • 否则使用这个:let controller = AppDelegate.getDelegate().window?.rootViewController controller?.present(aboutUsObj, animated: true, completion: nil)
    • “ViewControllerDetail”类型的值没有成员“aps”
    • 你在 'ViewControllerDetail' 中添加了 var aps = [String: AnyObject]()
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多