как настроить AppDelegate для push-уведомлений в swift - PullRequest
0 голосов
/ 01 сентября 2018

Я пытаюсь настроить систему push-уведомлений для своего приложения. У меня есть сервер и лицензия разработчика для настройки службы push-уведомлений.

Я сейчас запускаю свое приложение в Swift4 Xcode 9

вот мои вопросы:

1_ это возможно, что я установил заголовок и текст сообщения уведомления ??

2_ Какова функция получения массажа? Я использую didReceiveRemoteNotification, но это вызывается, когда я касаюсь уведомления, мне нужна функция, которая вызывается перед отображением уведомления о том, что я могу установить свой массаж

3_ Я генерирую токен устройства в appDelegate, а также на своей странице входа в систему для моего сервера, которые отличаются друг от друга. это не правильно, верно?

это мой делегат приложения:

          func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
                // Override point for customization after application launch.

                print("lunch",launchOptions?.description,launchOptions?.first)

                 application.registerForRemoteNotifications()
                FirebaseApp.configure()
                GMSPlacesClient.provideAPIKey("AIzaSyAXGsvzqyN3ArpWuycvQ5GS5weLtptWt14")

                UserDefaults.standard.set(["fa_IR"], forKey: "AppleLanguages")
                UserDefaults.standard.synchronize()


                  registerForPushNotifications()
                return true
            }


       func messaging(_ messaging: Messaging, didReceive remoteMessage: MessagingRemoteMessage) {

            print("test : ",messaging.apnsToken)
        }

        func application(application: UIApplication,  didReceiveRemoteNotification userInfo: [NSObject : AnyObject],  fetchCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void) {

            print("Recived: \(userInfo)")
            print()
           // completionHandler(.newData)

        }


    func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any]) {
        print("userInfo : ",userInfo)
        if application.applicationState == .active {
            print("active")
            //write your code here when app is in foreground
        } else {
            print("inactive")

            //write your code here for other state
        }
    }


   func getNotificationSettings() {
        if #available(iOS 10.0, *) {
            UNUserNotificationCenter.current().getNotificationSettings { (settings) in
                print("Notification settings: \(settings)")
                guard settings.authorizationStatus == .authorized else { return }
                DispatchQueue.main.async {
                UIApplication.shared.registerForRemoteNotifications()
                }
            }
        } else {


        }
    }


    func registerForPushNotifications() {
        if #available(iOS 10.0, *) {
            UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .sound, .badge]) {
                (granted, error) in
                print("Permission granted: \(granted)")
                guard granted else { return }
                self.getNotificationSettings()
            }
        } else {

            let settings = UIUserNotificationSettings(types: [.alert, .sound, .badge], categories: nil)
            UIApplication.shared.registerUserNotificationSettings(settings)
            UIApplication.shared.registerForRemoteNotifications()


           // self.getNotificationSettings()
        }
    }

1 Ответ

0 голосов
/ 01 сентября 2018
  1. Да, вы можете управлять содержимым уведомления, отправив соответствующую полезную нагрузку в уведомлении. При отправке полезной нагрузки в следующем шаблоне заголовок и тело будут отображаться в уведомлении
{
        "aps" : {
            "alert" : {
                "title" : "Game Request",
                "body" : "Bob wants to play poker",
            },
            "badge" : 5
        } 
}
  1. Отображение уведомления, обрабатываемого системой, в зависимости от состояния приложения. Если приложение находится в состоянии переднего плана, вы получите вызов в didReceiveRemoteNotification, в противном случае система обрабатывает отображаемую часть и получает управление в приложении, когда пользователь нажимает на уведомление.

Вы не можете редактировать содержимое уведомления со стороны приложения.

  1. Согласно документу

APN могут выдавать новый токен устройства по ряду причин:

Пользователь устанавливает ваше приложение на новое устройство

Пользователь восстанавливает устройство из резервной копии

Пользователь переустанавливает операционную систему

Другие системные события

Поэтому рекомендуется запрашивать токен устройства во время запуска.

Вы можете отправить токен на странице входа в систему, а не запрашивать новый токен при входе в систему.

...