Перейти к содержанию

Руководство по базовой интеграции iOS SDK 7.0+

В этом разделе содержится информация о том, как интегрировать Pushwoosh SDK в ваше iOS-приложение.

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

Anchor link to

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

Шаги интеграции

Anchor link to

1. Установка

Anchor link to

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

Swift Package Manager

Anchor link to

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

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

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

  • PushwooshFramework
  • PushwooshCore
  • PushwooshBridge
  • PushwooshLiveActivities

Откройте ваш 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 'PushwooshXCFramework'
end

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

Terminal window
pod install

2. Capabilities (Возможности)

Anchor link to

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

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

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

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

3. Код инициализации

Anchor link to

AppDelegate

Anchor link to

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

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

Info.plist

Anchor link to

В вашем Info.plist:

  • установите для ключа Pushwoosh_APPID значение кода приложения Pushwoosh (Application Code).
  • установите для ключа Pushwoosh_API_TOKEN значение Pushwoosh Device API Token.

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

Anchor link to

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

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

Anchor link to
  1. В Xcode выберите File > New > Target…
  2. Выберите Notification Service Extension и нажмите Next.
  3. Введите имя таргета и нажмите Finish.
  4. При запросе на активацию нажмите Cancel.

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

Anchor link to

Примечание: Если вы используете 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 'PushwooshXCFramework'
end
target 'MyAppNotificationExtension' do
use_frameworks!
pod 'PushwooshXCFramework'
end

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

Terminal window
pod update

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

Anchor link to

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

import UserNotifications
import PushwooshFramework
class NotificationService: UNNotificationServiceExtension {
var contentHandler: ((UNNotificationContent) -> Void)?
var bestAttemptContent: UNMutableNotificationContent?
override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) {
// Pushwoosh **********
PWNotificationExtensionManager.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

Anchor link to

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

  • Pushwoosh_APPID — код вашего приложения (Application Code).

5. Запустите проект

Anchor link to
  1. Соберите и запустите проект.
  2. Перейдите в Панель управления Pushwoosh и отправьте push-уведомление.
  3. Вы должны увидеть уведомление в приложении.

Расширенная интеграция Pushwoosh iOS

Anchor link to

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

Push-уведомления

Anchor link to

В Pushwoosh SDK есть два колбэка, предназначенных для обработки push-уведомлений:

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

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

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

Конфигурация пользователя

Anchor link to

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

import PushwooshFramework
class Registration {
func afterUserLogin(user: User) {
let pushwoosh = Pushwoosh.configure
// установить User ID
if let userId = user.userId {
pushwoosh.setUserId(userId)
}
// установить email пользователя
if let userEmail = user.email {
pushwoosh.setEmail(userEmail)
}
// установить номер SMS пользователя
if let userSmsNumber = user.SmsNumber {
pushwoosh.registerSmsNumber(userSmsNumber)
}
// установить номер WhatsApp пользователя
if let userWhatsAppNumber = user.WhatsAppNumber {
pushwoosh.registerSmsNumber(userWhatsAppNumber)
}
// установка дополнительной информации о пользователе в качестве тегов для Pushwoosh
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 PushwooshFramework
class UpdateUser {
func afterUserUpdateProfile(user: User) {
let pushwoosh = Pushwoosh.configure
// установить список избранных категорий
pushwoosh.setTags(["favorite_categories" : user.getFavoriteCategories()])
// установить платежную информацию
pushwoosh.setTags([
"is_subscribed": user.isSubscribed(),
"payment_status": user.getPaymentStatus(),
"billing_address": user.getBillingAddress()
])
}
}

События

Anchor link to

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

import PushwooshFramework
class Registration {
func afterUserLogin(user: User) {
if let userName = user.getUserName(), let lastLogin = user.getLastLoginDate() {
PWInAppManager.shared().postEvent("login", withAttributes: [
"name": userName,
"last_login": lastLogin
])
}
}
func afterUserPurchase(user: User, product: Product) {
let pushwoosh = Pushwoosh.configure
// Отслеживать событие покупки
PWInAppManager.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

Anchor link to

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

import PushwooshFramework
class ViewController: UIViewController, PWRichMediaPresentingDelegate {
override func viewDidLoad() {
super.viewDidLoad()
let richMediaConfiguration = PWModalWindowConfiguration.shared()
PWRichMediaManager.shared().delegate = self
richMediaConfiguration.configureModalWindow(with: .PWModalWindowPositionBottom,
present: .PWAnimationPresentFromBottom,
dismiss: .PWAnimationDismissDown)
}
func richMediaManager(_ richMediaManager: PWRichMediaManager!, shouldPresent richMedia: PWRichMedia!) -> Bool {
print("Rich media will be presented with: \(richMedia.pushPayload!)")
return true
}
func richMediaManager(_ richMediaManager: PWRichMediaManager!, didPresent richMedia: PWRichMedia!) {
print("Rich media has been presented with: \(richMedia.pushPayload!)")
}
func richMediaManager(_ richMediaManager: PWRichMediaManager!, didClose richMedia: PWRichMedia!) {
print("Rich media has been closed with: \(richMedia.pushPayload!)")
}
func richMediaManager(_ richMediaManager: PWRichMediaManager!, presentingDidFailFor richMedia: PWRichMedia!, withError error: (any Error)!) {
print("Failed to present rich media with: \(richMedia.pushPayload!). Error: \(error.localizedDescription)")
}
}

Устранение неполадок

Anchor link to

Не удалось собрать модуль ‘PushwooshFramework’

Anchor link to

При сборке проекта вы можете столкнуться с ошибкой, похожей на эту:

Failed to build module 'PushwooshFramework'; this SDK is not supported by the compiler
(the SDK is built with 'Apple Swift version 5.10 (swiftlang-5.10.0.13 clang-1500.3.9.4)',
while this compiler is 'Apple Swift version 6.1.2 effective-5.10 (swiftlang-6.1.2.1.2 clang-1700.0.13.5)')

Причина: Эта ошибка не связана с несовместимостью версий компилятора Swift. Начиная с версии Pushwoosh iOS SDK 6.8.0, SDK разделен на несколько взаимодействующих друг с другом компонентов. Ошибка возникает, когда в ваш проект добавлены не все необходимые фреймворки.

Решение: Убедитесь, что все четыре необходимых фреймворка добавлены в таргет вашего приложения при интеграции через Swift Package Manager:

  • PushwooshFramework
  • PushwooshCore
  • PushwooshBridge
  • PushwooshLiveActivities

Чтобы проверить это в Xcode:

  1. Выберите ваш проект в Project Navigator
  2. Выберите таргет вашего приложения
  3. Перейдите в General > Frameworks, Libraries, and Embedded Content
  4. Убедитесь, что в списке присутствуют все четыре фреймворка

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