Nano Hash - криптовалюты, майнинг, программирование

Firebase и Push-уведомления / Обмен сообщениями в облаке

Я не могу получить ни одного push-уведомления, отправленного на мое устройство. Я установил демонстрационное приложение с их демонстрационным приложением-делегатом, подписал его с помощью профиля подготовки, с приложением с поддержкой push-уведомлений и загрузил свой .p12 в панель администратора firebase, но, что бы я ни пытался (отказавшись от всего и т. д.), я не могу отправить push-сообщение через консоль firebase. Что мне здесь не хватает?

Изменить: я пытался отправить на весь сегмент, а также на одно устройство (с идентификатором, указанным в консоли)

import UIKit
import Firebase
import FirebaseInstanceID
import FirebaseMessaging

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?


    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
        // Register for remote notifications
        if #available(iOS 8.0, *) {
            // [START register_for_notifications]
            let settings: UIUserNotificationSettings =
                UIUserNotificationSettings(forTypes: [.Alert, .Badge, .Sound], categories: nil)
            application.registerUserNotificationSettings(settings)
            application.registerForRemoteNotifications()
            // [END register_for_notifications]
        } else {
            // Fallback
            let types: UIRemoteNotificationType = [.Alert, .Badge, .Sound]
            application.registerForRemoteNotificationTypes(types)
        }

        FIRApp.configure()

        // Add observer for InstanceID token refresh callback.
        NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(self.tokenRefreshNotification),
                                                         name: kFIRInstanceIDTokenRefreshNotification, object: nil)

        return true
    }

    // [START receive_message]
    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("Message ID: \(userInfo["gcm.message_id"]!)")

        // Print full message.
        print("%@", userInfo)
    }
    // [END receive_message]

    // [START refresh_token]
    func tokenRefreshNotification(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.
        connectToFcm()
    }
    // [END refresh_token]

    // [START connect_to_fcm]
    func connectToFcm() {
        FIRMessaging.messaging().connectWithCompletion { (error) in
            if (error != nil) {
                print("Unable to connect with FCM. \(error)")
            } else {
                print("Connected to FCM.")
            }
        }
    }
    // [END connect_to_fcm]

    func applicationDidBecomeActive(application: UIApplication) {
        connectToFcm()
    }

    // [START disconnect_from_fcm]
    func applicationDidEnterBackground(application: UIApplication) {
        FIRMessaging.messaging().disconnect()
        print("Disconnected from FCM.")
    }
    // [END disconnect_from_fcm]
}

  • Просто чтобы убедиться, вы развертываете этот код на устройстве или используете симулятор? Также помогает размещение журналов. У меня есть приложение с рабочим APN через Firebase. Можете ли вы подписаться на любую тему после подключения к FIRMessaging? Например: FIRMessaging.messaging().subscribeToTopic("/topics/issues") 07.08.2016
  • Спасибо за ваш комментарий, но я действительно забыл didRegisterRemoteNotification. О, я такой слепой. 08.08.2016

Ответы:


1

Я не вижу, что вы звоните setAPNSToken, может это то, что вам не хватает?

// AppDelegate.m
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
{
    [firebaseManager didRegisterRemoteNotifications:deviceToken];
}

// FirebaseManager.swift
func didRegisterRemoteNotifications(deviceToken: NSData) {

    let type: FIRInstanceIDAPNSTokenType
    #if DEBUG
        type = .Sandbox
    #else
        type = .Prod
    #endif

    FIRInstanceID.instanceID().setAPNSToken(deviceToken, type: type)
}
07.08.2016
  • Большое спасибо! Могу поклясться, что он у меня был, но его не было. Немного раздражает, поскольку я следил за docs @ firebase.google.com, но они все равно отстой. Я предпочел старые документы firebase, отличные от Google, ‹3.0 больше :) 08.08.2016
  • @ LucèBrùlè, да, правда ... Унаследованные документы Firebase были шедевром. Кроме того, я недавно ответил на множество тривиальных вопросов о firebase здесь, на SO, из-за их плохой новой документации. 08.08.2016
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..