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

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

В этом разделе содержится информация о том, как интегрировать 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
# Раскомментируйте следующую строку, чтобы определить глобальную платформу для вашего проекта
# platform :ios, '9.0'
target 'MyApp' do
# Раскомментируйте следующую строку, если вы не хотите использовать динамические фреймворки
use_frameworks!
pod 'PushwooshXCFramework'
end

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

Terminal window
pod install

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

Anchor link to

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

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

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

Если вы планируете использовать Time Sensitive Notifications (iOS 15+), добавьте также возможность 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.sharedInstance().delegate = self
// Регистрируемся для получения push-уведомлений
Pushwoosh.sharedInstance().registerForPushNotifications()
return true
}
// Обработка токена, полученного от APNS
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
Pushwoosh.sharedInstance().handlePushRegistration(deviceToken)
}
// Обработка ошибки получения токена
func application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) {
Pushwoosh.sharedInstance().handlePushRegistrationFailure(error)
}
//для тихих push-уведомлений
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable: Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
Pushwoosh.sharedInstance().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

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. Введите имя цели (target) и нажмите Finish.
  4. При запросе на активацию нажмите Cancel.

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

Anchor link to

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

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

Podfile
# Раскомментируйте следующую строку, чтобы определить глобальную платформу для вашего проекта
# platform :ios, '9.0'
target 'MyApp' do
# Раскомментируйте следующую строку, если вы не хотите использовать динамические фреймворки
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.sharedInstance().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.sharedInstance()
// установить User ID
if let userId = user.userId {
pushwoosh.setUserId(userId)
}
// установить email пользователя
if let userEmail = user.email {
pushwoosh.setEmail(userEmail)
}
// установка дополнительной информации о пользователе в виде тегов для 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.sharedInstance()
// установить список любимых категорий
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.sharedInstance()
// Отслеживание события покупки
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 будет представлен с: \(richMedia.pushPayload!)")
return true
}
func richMediaManager(_ richMediaManager: PWRichMediaManager!, didPresent richMedia: PWRichMedia!) {
print("Rich media был представлен с: \(richMedia.pushPayload!)")
}
func richMediaManager(_ richMediaManager: PWRichMediaManager!, didClose richMedia: PWRichMedia!) {
print("Rich media был закрыт с: \(richMedia.pushPayload!)")
}
func richMediaManager(_ richMediaManager: PWRichMediaManager!, presentingDidFailFor richMedia: PWRichMedia!, withError error: (any Error)!) {
print("Не удалось представить rich media с: \(richMedia.pushPayload!). Ошибка: \(error.localizedDescription)")
}
}

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

Anchor link to

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