Yo estaba trabajando a través de este tutorial (https://www.youtube.com/watch?v=JsWHzU1DxjM) para intentar poner las notificaciones push en mi app de iOS. Yo era capaz de conseguir con éxito el certificado APNS y establecer las «notificaciones push» y «fondo» modos de capacidades en. También, Firebase es capaz de obtener la información a partir de la notificación cuando yo envíe a uno de la base avanzada de la consola. Sin embargo, cuando la aplicación se está ejecutando en el fondo de la bandera de las notificaciones nunca aparecen. Siento que haya tenido un problema al convertir el tutorial de Objective-C, Swift, porque el tutorial fue en Objective-C, pero no estoy seguro. Puse mi clase AppDelegate y el programa de salida si que ayuda en absoluto.

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
connectToFcm()
NSNotificationCenter.defaultCenter().addObserver(
self,
selector: #selector(tokenRefreshCallback),
name: kFIRInstanceIDTokenRefreshNotification,
object: nil)
let allNotificationTypes = UIUserNotificationType(arrayLiteral: UIUserNotificationType.Sound, UIUserNotificationType.Alert, UIUserNotificationType.Badge)
let settings = UIUserNotificationSettings(forTypes: allNotificationTypes, categories: nil)
application.registerUserNotificationSettings(settings)
application.registerForRemoteNotifications()
return FBSDKApplicationDelegate.sharedInstance().application(application, didFinishLaunchingWithOptions: launchOptions)
}
func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject) -> Bool {
return FBSDKApplicationDelegate.sharedInstance().application(application, openURL: url, sourceApplication: sourceApplication, annotation: annotation)
}
override init() {
FIRApp.configure()
FIRDatabase.database().persistenceEnabled = false
}
func applicationWillResignActive(application: UIApplication) {
//Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
    //Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.
}
func applicationDidEnterBackground(application: UIApplication) {
//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.
    FIRMessaging.messaging().disconnect()
print("Disconnected from FCM.")
//If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
}
func applicationWillEnterForeground(application: UIApplication) {
connectToFcm()
//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.
}
func applicationDidBecomeActive(application: UIApplication) {
//Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
}
func applicationWillTerminate(application: UIApplication) {
//try! FIRAuth.auth()!.signOut()
}
func connectToFcm() {
FIRMessaging.messaging().connectWithCompletion { (error) in
if (error != nil) {
print("Unable to connect with FCM. \(error)")
} else {
print("Connected to FCM.")
}
}
}
func tokenRefreshCallback(notification: NSNotification) {
let refreshedToken = FIRInstanceID.instanceID().token()
print("InstanceID token: \(refreshedToken)")
//Connect to FCM since connection may have failed when attempted before having a token.
    if (refreshedToken != nil)
{
connectToFcm()
}
}
func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject],
fetchCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void) {
//If you are receiving a notification message while your app is in the background,
    //this callback will not be fired till the user taps on the notification launching the application.
    //TODO: Handle data of notification

//Print message ID.
    print("\(userInfo)")
//print("Message ID: \(userInfo["gcm.message_id"]!)")
    NSNotificationCenter.defaultCenter().postNotificationName("name", object: userInfo)
//Print full message.
    print("%@", userInfo)
}
}

De registro de la consola:

2016-06-20 19:14:50.801 MapKitTry[2244:721460] Configuring the default app.
2016-06-20 19:14:50.839 MapKitTry[2244:] <FIRAnalytics/INFO> Firebase Analytics v.3200000 started
2016-06-20 19:14:50.846 MapKitTry[2244:] <FIRAnalytics/INFO> To enable debug logging set the following application argument: -FIRAnalyticsDebugEnabled (see -omitted-)
2016-06-20 19:14:50.849: <FIRInstanceID/WARNING> FIRInstanceID AppDelegate proxy enabled, will swizzle app delegate remote notification handlers. To disable add "FirebaseAppDelegateProxyEnabled" to your Info.plist and set it to NO
2016-06-20 19:14:50.849: <FIRInstanceID/WARNING> Failed to fetch APNS token Error Domain=com.firebase.iid Code=1001 "(null)"
2016-06-20 19:14:50.853: <FIRMessaging/INFO> FIRMessaging library version 1.1.0
2016-06-20 19:14:50.863: <FIRMessaging/WARNING> FIRMessaging AppDelegate proxy enabled, will swizzle app delegate remote notification receiver handlers. Add "FirebaseAppDelegateProxyEnabled" to your Info.plist and set it to NO
2016-06-20 19:14:50.902 MapKitTry[2244:] <FIRAnalytics/INFO> Successfully created Firebase Analytics App Delegate Proxy automatically. To disable the proxy, set the flag FirebaseAppDelegateProxyEnabled to NO in the Info.plist
no login
2016-06-20 19:14:51.076 MapKitTry[2244:] <FIRAnalytics/INFO> Firebase Analytics enabled
Connected to FCM.
[notification: {
body = "Push notification";
e = 1;
}, collapse_key: pdrum3.KingOfTheTown, from: 302278087187]
%@ [notification: {
body = "Push notification";
e = 1;
}, collapse_key: pdrum3.KingOfTheTown, from: 302278087187]
  • Aquí u puede Ver mi demo=> stackoverflow.com/questions/37667753/…
  • Esta propiedad se utiliza para configurar el APN Token recibido por la aplicación de delegado. FIRMessaging utiliza el método swizzling para garantizar la APN token se establece automáticamente. Sin embargo, si usted ha desactivado swizzling mediante el establecimiento de FirebaseAppDelegateProxyEnabled a NO en su aplicación Info.plist, debe configurar manualmente el APN de token en la aplicación del delegado de la aplicación:didRegisterForRemoteNotificationswithdevicetoken: método. Si desea establecer el tipo de la APN token, en lugar de depender de la detección automática, vea: -setAPNSToken:tipo:.
InformationsquelleAutor pdrum | 2016-06-20

2 Comentarios

  1. 54

    Agregar FirebaseAppDelegateProxyEnabled tipo «Boolean» valor «NO» en su información.plist:

    Firebase Cloud Messaging no Crear Notificaciones Push, pero Obtiene la Información

    • Su pasado 2 días y por fin he encontrado la solución correcta.
    • Esta propiedad se utiliza para configurar el APN Token recibido por la aplicación de delegado. FIRMessaging utiliza el método swizzling para garantizar la APN token se establece automáticamente. Sin embargo, si usted ha desactivado swizzling mediante el establecimiento de FirebaseAppDelegateProxyEnabled a NO en su aplicación Info.plist, debe configurar manualmente el APN de token en la aplicación del delegado de la aplicación:didRegisterForRemoteNotificationswithdevicetoken: método. Si desea establecer el tipo de la APN token, en lugar de depender de la detección automática, vea: -setAPNSToken:tipo:.
  2. 1

    Que te estás perdiendo el UNUserNotificationDelegate métodos que permiten obtener notificaciones.

    extension NotificationManager: UNUserNotificationCenterDelegate {
    func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: () -> Void) {
    switch response.actionIdentifier {
    //NotificationActions is a custom String enum I've defined
            case NotificationActions.HighFive.rawValue:
    print("High Five Delivered!")
    default: break
    }
    }
    func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: (UNNotificationPresentationOptions) -> Void) {
    //Delivers a notification to an app running in the foreground.
        }
    }

    Estos dos métodos de delegado reemplazan a los viejos que usted está utilizando actualmente para recibir (es decir, didReceiveRemoteNotification). Ver este tutorial para obtener más información: http://cleanswifter.com/ios-10-local-notifications/

Dejar respuesta

Please enter your comment!
Please enter your name here