OneSignal - отправить уведомление в расширении Today - PullRequest
0 голосов
/ 27 июня 2018

Я использую OneSignal для отправки push-уведомлений в приложении. Если уведомление отправлено непосредственно из приложения, оно работает отлично. Если я пытаюсь отправить его с сегодняшнего расширения, я не могу получить push-токен и, следовательно, не могу отправить push-уведомление. Я зарегистрировал два приложения в OneSignal - одно для основного приложения и одно для расширения, и у меня есть профили обеспечения для обоих (сгенерированные с помощью https://onesignal.com/provisionator).

Это мой код:

@IBAction func didTapSendNotificationButton(_ sender: UIButton) {

    sendNotification()

}

func sendNotification() {
    let status: OSPermissionSubscriptionState = OneSignal.getPermissionSubscriptionState()

    let pushToken = status.subscriptionStatus.pushToken
    let userId = status.subscriptionStatus.userId

    if pushToken != nil {
        let message = "This is a notification's message or body"
        let notificationContent = [
            "include_player_ids": [userId],
            "contents": ["en": message], // Required unless "content_available": true or "template_id" is set
            "headings": ["en": "Notification Title"],
            "subtitle": ["en": "An English Subtitle"],
            // If want to open a url with in-app browser
            //"url": "https://google.com",
            // If you want to deep link and pass a URL to your webview, use "data" parameter and use the key in the AppDelegate's notificationOpenedBlock
            "data": ["OpenURL": "https://imgur.com"],
            "ios_attachments": ["id" : "https://cdn.pixabay.com/photo/2017/01/16/15/17/hot-air-balloons-1984308_1280.jpg"],
            "ios_badgeType": "Increase",
            "ios_badgeCount": 1,
            "ios_sound": "sound.wav"
            ] as [String : Any]

        OneSignal.postNotification(notificationContent, onSuccess: { (successDictionary) in
            print("Success: ", successDictionary)
        }, onFailure: { (error) in
            print("Error: ", error?.localizedDescription)
        })
    }
}

1 Ответ

0 голосов
/ 27 июня 2018

AppDelegate.swift

func onOSSubscriptionChanged(_ stateChanges: OSSubscriptionStateChanges!) {
        if !stateChanges.from.subscribed && stateChanges.to.subscribed {
            print("Subscribed for OneSignal push notifications!")

        }
        if stateChanges.to.userId != nil {
            AppData.sharedInstance.oneSignalToken = stateChanges.to.userId!
        }
    }

enter image description here

didFinishLaunchingWithOptions

OneSignal.initWithLaunchOptions(launchOptions, appId: ONE_SIGNAL_KEY)
OneSignal.inFocusDisplayType = .notification

handleOneSignal(launchOptions)
OneSignal.add(self as OSSubscriptionObserver)

Создать функцию

func handleOneSignal(_ launchOptions: [AnyHashable: Any]?) {
        OneSignal.initWithLaunchOptions(launchOptions, appId:ONE_SIGNAL_KEY, handleNotificationReceived: { (notification) in
        }, handleNotificationAction: { (result) in
            let payload: OSNotificationPayload? = result?.notification.payload
            var customKey: String? = payload?.body
            if payload?.additionalData != nil {
                var additionalData: [AnyHashable: Any]! = payload?.additionalData
                if additionalData!["customeKey"] != nil {
                    customKey = customKey! + "\nPressed ButtonId:\(String(describing: additionalData!["customeKey"]))"
                }
            }
        }, settings: [kOSSettingsKeyAutoPrompt : true])
    }

Отправка push-уведомлений

let message="\(senderDisplayName!):\(text!)"
OneSignal.postNotification(["contents":["en":message], "include_player_ids": [self.userObj.userDeviceToken]])

Ссылка https://documentation.onesignal.com/docs/ios-native-sdk#section--getpermissionsubscriptionstate-

...