বিষয়বস্তুতে যান

iOS SDK 7.0+ বেসিক ইন্টিগ্রেশন গাইড

এই বিভাগে আপনার iOS অ্যাপ্লিকেশনে Pushwoosh SDK কীভাবে ইন্টিগ্রেট করবেন সে সম্পর্কে তথ্য রয়েছে।

পূর্বশর্ত

Anchor link to

আপনার অ্যাপে Pushwoosh iOS SDK ইন্টিগ্রেট করার জন্য, আপনার নিম্নলিখিত জিনিসগুলির প্রয়োজন হবে:

ইন্টিগ্রেশন ধাপ

Anchor link to

১. ইনস্টলেশন

Anchor link to

আপনি Swift Package Manager অথবা CocoaPods ব্যবহার করে আপনার অ্যাপ্লিকেশনে Pushwoosh SDK ইন্টিগ্রেট করতে পারেন।

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 খুলুন এবং নির্ভরতা (dependency) যোগ করুন:

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

তারপর, টার্মিনালে, নির্ভরতা (dependencies) ইনস্টল করার জন্য নিম্নলিখিত কমান্ডটি চালান:

Terminal window
pod install

২. Capabilities

Anchor link to

আপনার প্রজেক্টে পুশ নোটিফিকেশন সক্রিয় করতে, আপনাকে নির্দিষ্ট capabilities যোগ করতে হবে।

Signing & Capabilities বিভাগে, নিম্নলিখিত capabilities যোগ করুন:

  • Push Notifications
  • Background Modes। এই capability যোগ করার পর, Remote notifications-এর জন্য বক্সটি চেক করুন।

আপনি যদি Time Sensitive Notifications (iOS 15+) ব্যবহার করতে চান, তাহলে Time Sensitive Notifications capability-টিও যোগ করুন।

৩. ইনিশিয়ালাইজেশন কোড

Anchor link to

AppDelegate

Anchor link to

আপনার AppDelegate ক্লাসে নিম্নলিখিত কোডটি যোগ করুন:

import SwiftUI
import PushwooshFramework
@main
struct MyApp: App {
// Register AppDelegate as 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 {
// Initialization code
// Set custom delegate for push handling
Pushwoosh.configure.delegate = self
// Register for push notifications
Pushwoosh.configure.registerForPushNotifications()
return true
}
// Handle token received from APNS
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
Pushwoosh.configure.handlePushRegistration(deviceToken)
}
// Handle token receiving error
func application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) {
Pushwoosh.configure.handlePushRegistrationFailure(error)
}
//for silent push notifications
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable: Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
Pushwoosh.configure.handlePushReceived(userInfo)
completionHandler(.noData)
}
// Fired when a push is received
func pushwoosh(_ pushwoosh: Pushwoosh, onMessageReceived message: PWMessage) {
print("onMessageReceived: ", message.payload!.description)
}
// Fired when a user taps the notification
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-এ:

৪. মেসেজ ডেলিভারি ট্র্যাকিং

Anchor link to

Pushwoosh, Notification Service Extension-এর মাধ্যমে পুশ নোটিফিকেশনের জন্য ডেলিভারি ইভেন্ট ট্র্যাকিং সমর্থন করে।

Notification Service Extension যোগ করুন

Anchor link to

১. Xcode-এ, File > New > Target… নির্বাচন করুন। ২. Notification Service Extension বেছে নিন এবং Next চাপুন। ৩. টার্গেটের নাম লিখুন এবং Finish চাপুন। ৪. অ্যাক্টিভেশনের জন্য অনুরোধ করা হলে, 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

Notification Service Extension-এ Pushwoosh SDK যোগ করুন

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 {
// Modify the notification content here...
contentHandler(bestAttemptContent)
}
}
override func serviceExtensionTimeWillExpire() {
// Called just before the extension will be terminated by the system.
// Use this as an opportunity to deliver your "best attempt" at modified content, otherwise the original push payload will be used.
if let contentHandler = contentHandler, let bestAttemptContent = bestAttemptContent {
contentHandler(bestAttemptContent)
}
}
}

Info.plist

Anchor link to

আপনার Notification Service Extension-এর Info.plist-এ যোগ করুন:

  • Pushwoosh_APPID - আপনার অ্যাপ্লিকেশন কোড।

৫. প্রজেক্ট চালান

Anchor link to

১. প্রজেক্টটি বিল্ড করুন এবং চালান। ২. Pushwoosh কন্ট্রোল প্যানেলে যান এবং একটি পুশ নোটিফিকেশন পাঠান। ৩. আপনার অ্যাপে নোটিফিকেশনটি দেখতে পাওয়া উচিত।

বর্ধিত Pushwoosh iOS ইন্টিগ্রেশন

Anchor link to

এই পর্যায়ে, আপনি ইতিমধ্যে SDK ইন্টিগ্রেট করেছেন এবং পুশ নোটিফিকেশন পাঠাতে ও গ্রহণ করতে পারেন। এখন, আসুন মূল কার্যকারিতা অন্বেষণ করি।

পুশ নোটিফিকেশন

Anchor link to

Pushwoosh SDK-তে, পুশ নোটিফিকেশন হ্যান্ডেল করার জন্য দুটি কলব্যাক ডিজাইন করা হয়েছে:

  • onMessageReceived: এই মেথডটি কল করা হয় যখন একটি পুশ নোটিফিকেশন গৃহীত হয়।
  • onMessageOpened: এই মেথডটি কল করা হয় যখন ব্যবহারকারী নোটিফিকেশনের সাথে ইন্টারঅ্যাক্ট করে (খোলে)।

এই কলব্যাকগুলি ডেভেলপারদের তাদের অ্যাপ্লিকেশনের মধ্যে পুশ নোটিফিকেশন গ্রহণ এবং ব্যবহারকারীর ইন্টারঅ্যাকশন পরিচালনা করতে সক্ষম করে।

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
// set user ID
if let userId = user.userId {
pushwoosh.setUserId(userId)
}
// set user email
if let userEmail = user.email {
pushwoosh.setEmail(userEmail)
}
// set user SMS number
if let userSmsNumber = user.SmsNumber {
pushwoosh.registerSmsNumber(userSmsNumber)
}
// set user WhatsApp number
if let userWhatsAppNumber = user.WhatsAppNumber {
pushwoosh.registerSmsNumber(userWhatsAppNumber)
}
// setting additional user information as tags for 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
])
}
}
}

ট্যাগ

Anchor link to

ট্যাগ হলো ব্যবহারকারী বা ডিভাইসে নির্ধারিত কী-ভ্যালু পেয়ার, যা পছন্দ বা আচরণের মতো অ্যাট্রিবিউটের উপর ভিত্তি করে সেগমেন্টেশন করতে দেয়, ফলে টার্গেটেড মেসেজিং সক্ষম হয়।

import PushwooshFramework
class UpdateUser {
func afterUserUpdateProfile(user: User) {
let pushwoosh = Pushwoosh.configure
// set list of favorite categories
pushwoosh.setTags(["favorite_categories" : user.getFavoriteCategories()])
// set payment information
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
// Track purchase event
PWInAppManager.shared().postEvent("purchase", withAttributes: [
"product_id": product.getId(),
"product_name": product.getName(),
"price": product.getPrice(),
"quantity": product.getQuantity()
])
// Set user tags
let lastPurchaseDate = Date().timeIntervalSince1970
let lifetimeSpend = getCurrentLifetimeSpend() + product.getPrice()
pushwoosh.setTags([
"last_purchase_date": lastPurchaseDate,
"lifetime_spend": lifetimeSpend
])
}
}

রিচ মিডিয়া

Anchor link to

রিচ মিডিয়া বলতে ইন্টারেক্টিভ এবং মাল্টিমিডিয়া সামগ্রী, যেমন ছবি, ভিডিও বা HTML বোঝায়, যা ব্যবহারকারীর সম্পৃক্ততা বাড়ানোর জন্য নোটিফিকেশন এবং ইন-অ্যাপ মেসেজে ব্যবহৃত হয়।

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-এ এটি যাচাই করতে: ১. প্রজেক্ট নেভিগেটরে আপনার প্রজেক্ট নির্বাচন করুন ২. আপনার অ্যাপ টার্গেট নির্বাচন করুন ৩. General > Frameworks, Libraries, and Embedded Content-এ যান ৪. নিশ্চিত করুন যে চারটি ফ্রেমওয়ার্কই তালিকাভুক্ত আছে


ইন্টিগ্রেশন প্রক্রিয়া চলাকালীন কোনো সমস্যার সম্মুখীন হলে, অনুগ্রহ করে সাপোর্ট এবং কমিউনিটি বিভাগটি দেখুন।