Skip to content

Базовое руководство по интеграции iOS SDK

Этот раздел содержит информацию о том, как интегрировать Wavesend SDK в ваше iOS-приложение.

Предварительные требования

Section titled “Предварительные требования”

Для интеграции Wavesend iOS SDK в ваше приложение вам понадобится следующее:

Вы можете интегрировать Wavesend SDK в ваше приложение, используя Swift Package Manager или CocoaPods.

В разделе Package Dependencies добавьте следующий пакет:

https://github.com/Wavesend/Wavesend-XCFramework

Для использования Wavesend iOS SDK убедитесь, что при интеграции через Swift Package Manager в таргет вашего приложения добавлены следующие четыре фреймворка:

  • WavesendFramework
  • WavesendCore
  • WavesendBridge
  • WavesendLiveActivities

Откройте ваш Podfile и добавьте зависимость:

Terminal window
# Uncomment the next line to define a global platform for your project
# platform :ios, '9.0'
target 'MyApp' do
# Comment the next line if you don't want to use dynamic frameworks
use_frameworks!
pod 'WavesendXCFramework'
end

Затем в терминале выполните следующую команду для установки зависимостей:

Terminal window
pod install

Чтобы включить Push Notifications в вашем проекте, необходимо добавить определенные возможности (capabilities).

В разделе Signing & Capabilities добавьте следующие возможности:

  • Push Notifications
  • Background Modes. После добавления этой возможности установите флажок Remote notifications.

Если вы собираетесь использовать Time Sensitive Notifications (iOS 15+), добавьте также возможность Time Sensitive Notifications.

Добавьте следующий код в ваш класс AppDelegate:

import SwiftUI
import WavesendFramework
@main
struct MyApp: App {
// Регистрация AppDelegate в качестве UIApplicationDelegate
@UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegate
var body: some Scene {
WindowGroup {
ContentView()
}
}
}
class AppDelegate: NSObject, UIApplicationDelegate, WVMessagingDelegate {
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// Код инициализации
// Установка пользовательского делегата для обработки push-уведомлений
Wavesend.sharedInstance().delegate = self
// Регистрация для получения push-уведомлений
Wavesend.sharedInstance().registerForPushNotifications()
return true
}
// Обработка токена, полученного от APNS
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
Wavesend.sharedInstance().handlePushRegistration(deviceToken)
}
// Обработка ошибки получения токена
func application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) {
Wavesend.sharedInstance().handlePushRegistrationFailure(error)
}
// для тихих push-уведомлений
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable: Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
Wavesend.sharedInstance().handlePushReceived(userInfo)
completionHandler(.noData)
}
// Срабатывает при получении push-уведомления
func pushwoosh(_ pushwoosh: Wavesend, onMessageReceived message: WVMessage) {
print("onMessageReceived: ", message.payload!.description)
}
// Срабатывает, когда пользователь нажимает на уведомление
func pushwoosh(_ pushwoosh: Wavesend, onMessageOpened message: WVMessage) {
print("onMessageOpened: ", message.payload!.description)
}
}
struct ContentView: View {
var body: some View {
Text("Wavesend with SwiftUI")
.padding()
}
}

В вашем Info.plist:

  • установите для ключа Pushwoosh_APPID значение Application Code из Wavesend.
  • установите для ключа Pushwoosh_API_TOKEN значение Device API Token из Wavesend

4. Отслеживание доставки сообщений

Section titled “4. Отслеживание доставки сообщений”

Wavesend поддерживает отслеживание событий доставки для push-уведомлений через Notification Service Extension.

Добавление Notification Service Extension

Section titled “Добавление Notification Service Extension”
  1. В Xcode выберите File > New > Target…
  2. Выберите Notification Service Extension и нажмите Next.
  3. Введите имя таргета и нажмите Finish.
  4. Когда появится запрос на активацию, нажмите Cancel.

Зависимости для Notification Service Extension (только для CocoaPods)

Section titled “Зависимости для Notification Service Extension (только для CocoaPods)”

Примечание: Если вы используете Swift Package Manager для управления зависимостями, вы можете пропустить этот шаг, так как зависимости добавляются автоматически.

Откройте ваш Podfile и добавьте зависимость для таргета:

Podfile
# Uncomment the next line to define a global platform for your project
# platform :ios, '9.0'
target 'MyApp' do
# Comment the next line if you don't want to use dynamic frameworks
use_frameworks!
pod 'WavesendXCFramework'
end
target 'MyAppNotificationExtension' do
use_frameworks!
pod 'WavesendXCFramework'
end

Выполните следующую команду в терминале, чтобы обновить зависимости:

Terminal window
pod update

Добавление Wavesend SDK в Notification Service Extension

Section titled “Добавление Wavesend SDK в Notification Service Extension”

Этот код позволяет перехватывать и обрабатывать уведомления в вашем расширении для уведомлений.

import UserNotifications
import WavesendFramework
class NotificationService: UNNotificationServiceExtension {
var contentHandler: ((UNNotificationContent) -> Void)?
var bestAttemptContent: UNMutableNotificationContent?
override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) {
// Wavesend **********
WVNotificationExtensionManager.shared().handle(request, contentHandler: contentHandler)
// ********************
self.contentHandler = contentHandler
bestAttemptContent = (request.content.mutableCopy() as? UNMutableNotificationContent)
if let bestAttemptContent = bestAttemptContent {
// Здесь можно изменить содержимое уведомления...
contentHandler(bestAttemptContent)
}
}
override func serviceExtensionTimeWillExpire() {
// Вызывается непосредственно перед тем, как расширение будет завершено системой.
// Используйте это как возможность доставить ваш "наилучший" измененный контент, иначе будет использована исходная полезная нагрузка push-уведомления.
if let contentHandler = contentHandler, let bestAttemptContent = bestAttemptContent {
contentHandler(bestAttemptContent)
}
}
}

В Info.plist вашего Notification Service Extension добавьте:

  • Pushwoosh_APPID — ваш Application Code.
  1. Соберите и запустите проект.
  2. Перейдите в Wavesend Control Panel и отправьте push-уведомление.
  3. Вы должны увидеть уведомление в приложении.

Расширенная интеграция Wavesend для iOS

Section titled “Расширенная интеграция Wavesend для iOS”

На этом этапе вы уже интегрировали SDK и можете отправлять и получать push-уведомления. Теперь давайте рассмотрим основную функциональность.

В Wavesend SDK есть два колбэка для обработки push-уведомлений:

  • onMessageReceived: этот метод вызывается при получении push-уведомления.
  • onMessageOpened: этот метод вызывается, когда пользователь взаимодействует с уведомлением (открывает его).

Эти колбэки позволяют разработчикам управлять получением push-уведомлений и взаимодействием пользователей с ними в своих приложениях.

import WavesendFramework
class AppDelegate: NSObject, UIApplicationDelegate, WVMessagingDelegate {
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool {
Wavesend.sharedInstance().delegate = self;
}
func pushwoosh(_ pushwoosh: Wavesend, onMessageOpened message: WVMessage) {
if let payload = message.payload {
print("onMessageOpened: \(payload)")
}
}
func pushwoosh(_ pushwoosh: Wavesend, onMessageReceived message: WVMessage) {
if let payload = message.payload {
print("onMessageReceived: \(payload)")
}
}
}

Настройка пользователя

Section titled “Настройка пользователя”

Фокусируясь на поведении и предпочтениях отдельных пользователей, вы можете предоставлять персонализированный контент, что ведет к повышению удовлетворенности и лояльности пользователей.

import WavesendFramework
class Registration {
func afterUserLogin(user: User) {
let pushwoosh = Wavesend.sharedInstance()
// установка User ID
if let userId = user.userId {
pushwoosh.setUserId(userId)
}
// установка email пользователя
if let userEmail = user.email {
pushwoosh.setEmail(userEmail)
}
// установка дополнительной информации о пользователе в виде тегов для Wavesend
if let age = user.userDetails.age,
let name = user.userDetails.userName,
let lastLogin = user.userDetails.lastLoginDate {
pushwoosh.setTags([
"age": age,
"name": name,
"last_login": lastLogin
])
}
}
}

Теги — это пары «ключ-значение», присваиваемые пользователям или устройствам, которые позволяют сегментировать аудиторию на основе атрибутов, таких как предпочтения или поведение, для целевых рассылок.

import WavesendFramework
class UpdateUser {
func afterUserUpdateProfile(user: User) {
let pushwoosh = Wavesend.sharedInstance()
// установка списка избранных категорий
pushwoosh.setTags(["favorite_categories" : user.getFavoriteCategories()])
// установка платежной информации
pushwoosh.setTags([
"is_subscribed": user.isSubscribed(),
"payment_status": user.getPaymentStatus(),
"billing_address": user.getBillingAddress()
])
}
}

Event — это определенные действия пользователя или события в приложении, которые можно отслеживать для анализа поведения и запуска соответствующих сообщений или действий.

import WavesendFramework
class Registration {
func afterUserLogin(user: User) {
if let userName = user.getUserName(), let lastLogin = user.getLastLoginDate() {
WVInAppManager.shared().postEvent("login", withAttributes: [
"name": userName,
"last_login": lastLogin
])
}
}
func afterUserPurchase(user: User, product: Product) {
let pushwoosh = Wavesend.sharedInstance()
// Отслеживание события покупки
WVInAppManager.shared().postEvent("purchase", withAttributes: [
"product_id": product.getId(),
"product_name": product.getName(),
"price": product.getPrice(),
"quantity": product.getQuantity()
])
// Установка тегов пользователя
let lastPurchaseDate = Date().timeIntervalSince1970
let lifetimeSpend = getCurrentLifetimeSpend() + product.getPrice()
pushwoosh.setTags([
"last_purchase_date": lastPurchaseDate,
"lifetime_spend": lifetimeSpend
])
}
}

Rich media — это интерактивный и мультимедийный контент, такой как изображения, видео или HTML, используемый в уведомлениях и in-app сообщениях для повышения вовлеченности пользователей.

import WavesendFramework
class ViewController: UIViewController, WVRichMediaPresentingDelegate {
override func viewDidLoad() {
super.viewDidLoad()
let richMediaConfiguration = WVModalWindowConfiguration.shared()
WVRichMediaManager.shared().delegate = self
richMediaConfiguration.configureModalWindow(with: .WVModalWindowPositionBottom,
present: .WVAnimationPresentFromBottom,
dismiss: .WVAnimationDismissDown)
}
func richMediaManager(_ richMediaManager: WVRichMediaManager!, shouldPresent richMedia: WVRichMedia!) -> Bool {
print("Rich media будет представлен с: \(richMedia.pushPayload!)")
return true
}
func richMediaManager(_ richMediaManager: WVRichMediaManager!, didPresent richMedia: WVRichMedia!) {
print("Rich media был представлен с: \(richMedia.pushPayload!)")
}
func richMediaManager(_ richMediaManager: WVRichMediaManager!, didClose richMedia: WVRichMedia!) {
print("Rich media был закрыт с: \(richMedia.pushPayload!)")
}
func richMediaManager(_ richMediaManager: WVRichMediaManager!, presentingDidFailFor richMedia: WVRichMedia!, withError error: (any Error)!) {
print("Не удалось представить rich media с: \(richMedia.pushPayload!). Ошибка: \(error.localizedDescription)")
}
}

Если у вас возникнут проблемы в процессе интеграции, обратитесь к разделу поддержки и сообщества.