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

iOS SDK কাস্টমাইজ করা

ইন্টিগ্রেশন

Anchor link to

ডিপ লিঙ্কিং

Anchor link to

আপনার Info.plist ফাইলে URL Identifier এবং URL Scheme সহ URL types অ্যারে যোগ করুন।
নীচের উদাহরণে URL Scheme হল com.pushwoosh এবং URL Identifier হল promotion

আপনার অ্যাপ ডেলিগেট ফাইলে (সাধারণত iOS 12 এবং তার নিচের জন্য AppDelegate.m, অথবা iOS 13 এবং তার উপরের জন্য SceneDelegate.m), নীচের উদাহরণে বর্ণিত উপযুক্ত openURL ডেলিগেট ফাংশন যোগ করুন। উদাহরণটি সঠিক পেজটি পরীক্ষা করে, URL থেকে “id” মান পার্স করে, এবং প্রতিক্রিয়া হিসাবে PromoPageViewController খোলে।

AppDelegate.swift

func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
let components = URLComponents(url: url, resolvingAgainstBaseURL: false)
let page = components?.host
var promotionId: String?
if page == "promotion" {
return
}
let items = components?.queryItems ?? []
for item in items {
if item.name == "id" {
promotionId = item.value
}
}
//show PromoPageViewController
}

SceneDelegate.swift

func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) {
guard let urlContext = URLContexts.first else { return }
let components = URLComponents(url: urlContext.url, resolvingAgainstBaseURL: false)
let page = components?.host
var promotionId: String?
guard page == "promotion" else {
return
}
let items = components?.queryItems ?? []
for item in items {
if item.name == "id" {
promotionId = item.value
}
}
//show PromoPageViewController
}

ইউনিভার্সাল লিঙ্কস

Anchor link to

ইউনিভার্সাল লিঙ্কস ব্যবহারকারীদের আপনার ওয়েবসাইটের একটি লিঙ্কে ট্যাপ করার সাথে সাথে সরাসরি আপনার অ্যাপ খুলতে দেয়। কাস্টম URL স্কিমের বিপরীতে, ইউনিভার্সাল লিঙ্কস স্ট্যান্ডার্ড https:// URL ব্যবহার করে এবং একটি আরও নির্বিঘ্ন ব্যবহারকারীর অভিজ্ঞতা প্রদান করে।

এটি কিভাবে কাজ করে

Anchor link to

যখন একটি পুশ নোটিফিকেশনে একটি https:// URL থাকে (“url” বা “l” প্যারামিটারে), SDK করবে:

  1. URL দিয়ে একটি NSUserActivity তৈরি করুন
  2. আপনার অ্যাপের ইউনিভার্সাল লিঙ্কস হ্যান্ডলারকে কল করুন (scene:continueUserActivity: বা application:continueUserActivity:restorationHandler:)
  3. যদি আপনার অ্যাপ URLটি হ্যান্ডেল না করে, তবে এটি ফলব্যাক হিসাবে Safari-তে খুলবে

সেটআপ

Anchor link to
  1. Xcode-এ অ্যাসোসিয়েটেড ডোমেন কনফিগার করুন

    আপনার অ্যাপে অ্যাসোসিয়েটেড ডোমেন ক্ষমতা যোগ করুন এবং আপনার ডোমেন যোগ করুন:

    applinks:yourdomain.com
  2. Apple অ্যাপ সাইট অ্যাসোসিয়েশন ফাইলটি হোস্ট করুন

    আপনার ওয়েব সার্ভারে https://yourdomain.com/.well-known/apple-app-site-association-এ একটি apple-app-site-association ফাইল তৈরি করুন:

    {
    "applinks": {
    "apps": [],
    "details": [
    {
    "appID": "TEAM_ID.com.your.bundleid",
    "paths": ["/path/*", "/promotion/*"]
    }
    ]
    }
    }

    TEAM_ID-কে আপনার Apple ডেভেলপার টিম আইডি দিয়ে এবং com.your.bundleid-কে আপনার অ্যাপের বান্ডেল আইডেন্টিফায়ার দিয়ে প্রতিস্থাপন করুন।

  3. ইউনিভার্সাল লিঙ্কস হ্যান্ডলার প্রয়োগ করুন

    SceneDelegate.swift (iOS 13+)

    func scene(_ scene: UIScene, continue userActivity: NSUserActivity) {
    guard userActivity.activityType == NSUserActivityTypeBrowsingWeb,
    let url = userActivity.webpageURL else {
    return
    }
    // Handle the Universal Link URL
    let components = URLComponents(url: url, resolvingAgainstBaseURL: false)
    let path = components?.path
    if path?.starts(with: "/promotion") == true {
    // Navigate to promotion screen
    let promotionId = components?.queryItems?.first(where: { $0.name == "id" })?.value
    // Show promotion with promotionId
    }
    }

    AppDelegate.swift (iOS 12 এবং তার আগে, অথবা ফলব্যাক হিসাবে)

    func application(_ application: UIApplication,
    continue userActivity: NSUserActivity,
    restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
    guard userActivity.activityType == NSUserActivityTypeBrowsingWeb,
    let url = userActivity.webpageURL else {
    return false
    }
    // Handle the Universal Link URL
    let components = URLComponents(url: url, resolvingAgainstBaseURL: false)
    let path = components?.path
    if path?.starts(with: "/promotion") == true {
    // Navigate to promotion screen
    return true
    }
    return false
    }

ইউনিভার্সাল লিঙ্ক দিয়ে পুশ পাঠানো

Anchor link to

একটি পুশ নোটিফিকেশন তৈরি করার সময়, Action ফিল্ডে আপনার ওয়েবসাইটের URL ব্যবহার করুন:

https://yourdomain.com/promotion?id=123

SDK স্বয়ংক্রিয়ভাবে এই URLটি আপনার ইউনিভার্সাল লিঙ্কস হ্যান্ডলারে রুট করবে, যা আপনাকে ব্যবহারকারীকে আপনার অ্যাপের উপযুক্ত স্ক্রিনে নেভিগেট করতে দেবে।

ইন-অ্যাপ পারচেজ ট্র্যাকিং

Anchor link to

ডিফল্টরূপে, ইন-অ্যাপ পারচেজ ট্র্যাকিং নিষ্ক্রিয় করা থাকে। আপনি যদি কাস্টমার জার্নি কনফিগার করার সময় ইন-অ্যাপ পারচেজ ট্র্যাক করতে চান, তাহলে info.plist ফাইলে Pushwoosh_PURCHASE_TRACKING_ENABLED ফ্ল্যাগটিকে true তে সেট করুন। আপনি টেবিলে উপলব্ধ ফ্ল্যাগের একটি তালিকা খুঁজে পেতে পারেন।

আপনি যদি ম্যানুয়ালি ইন-অ্যাপ পারচেজ ট্র্যাক করতে চান, তাহলে আপনি নীচের কোডটি ব্যবহার করতে পারেন।

paymentQueue:updatedTransactions: delegate পদ্ধতিতে PushManager-এর sendSKPaymentTransactions পদ্ধতিকে কল করুন

func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {
// In-Apps Tracking Pushwoosh code here
Pushwoosh.sharedInstance().sendSKPaymentTransactions(transactions)
// the rest of the code, consume transactions, etc
}
InAppTrackingViewController.swift

জিওজোনস পুশ নোটিফিকেশন

Anchor link to

জিওজোনস পুশ নোটিফিকেশনগুলি একটি পৃথক ফ্রেমওয়ার্ক PushwooshGeozones-এ এনক্যাপসুলেট করা আছে।

  1. আপনার প্রজেক্টে PushwooshGeozones.framework যোগ করুন

    একটি ডিপেন্ডেন্সি ম্যানেজার ব্যবহার করে আপনার প্রজেক্টে PushwooshGeozones.framework যোগ করতে, আপনার podfile বা cartfile-এ নিম্নলিখিত লাইনগুলি রাখুন:

    pod 'PushwooshXCFramework/Geozones'

    বিকল্পভাবে, আপনি কেবল ফ্রেমওয়ার্কটিকে আপনার প্রজেক্টের Build Phases-এর Link Binaries With Libraries-এ ড্র্যাগ এবং ড্রপ করতে পারেন।

  2. আপনার Info.plist-এ নিম্নলিখিত কীগুলি যোগ করুন:

    • NSLocationWhenInUseUsageDescription(প্রয়োজনীয়) অ্যাপটি শুধুমাত্র ফোরগ্রাউন্ডে চলার সময় জিওজোনস ট্র্যাক করার জন্য।
    • NSLocationAlwaysAndWhenInUseUsageDescription(প্রয়োজনীয়) অ্যাপটি ফোরগ্রাউন্ড এবং ব্যাকগ্রাউন্ড উভয় ক্ষেত্রেই জিওজোনস ট্র্যাক করার জন্য এবং একটি অনুমতি অনুরোধ ডায়ালগ পপ-আপ দেখানোর জন্য।
    • NSLocationAlwaysUsageDescription(ঐচ্ছিক) অ্যাপটি সব সময় জিওজোনস ট্র্যাক করার জন্য; যদি আপনার অ্যাপ iOS 10 এবং তার আগের সংস্করণগুলিকে টার্গেট করে তবে এটি ব্যবহার করা উচিত।
    <key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
    <string>for app to track Geozones in both conditions and to show a permission request dialog</string>
    <key>NSLocationWhenInUseUsageDescription</key>
    <string>for app to track Geozones only while running in the foreground</string>

  3. ফ্রেমওয়ার্কটি ইম্পোর্ট করুন

    import PushwooshGeozones
  4. জিওজোনস ট্র্যাকিং শুরু করুন

    PWGeozonesManager.shared()?.startLocationTracking()

    GitHub রেফারেন্স

উদাহরণ
Anchor link to
override func viewDidLoad() {
super.viewDidLoad()
// Start Geozones tracking when needed
PWGeozonesManager.shared().startLocationTracking()
}

একটি রিচ মিডিয়া কিউ তৈরি করা

Anchor link to

যদি একই সাথে দেখানোর জন্য একাধিক রিচ মিডিয়া পেজ থাকে (উদাহরণস্বরূপ, দুই বা ততোধিক ইন-অ্যাপের জন্য ট্রিগার ইভেন্টগুলি এক মুহূর্তে ঘটে, অথবা একটি ভিন্ন ট্রিগার ইভেন্ট ঘটার মুহূর্তে একটি রিচ মিডিয়া পেজ ইতিমধ্যে প্রদর্শিত হচ্ছে), আপনি রিচ মিডিয়া পেজ প্রদর্শনের জন্য একটি কিউ সেট আপ করতে পারেন। একটি কিউ তৈরি করতে, নীচে বর্ণিত পদক্ষেপগুলি অনুসরণ করুন।

  1. একটি ক্লাস তৈরি করুন যা PWRichMediaPresentingDelegate প্রয়োগ করে:

    @interface ChainedRichMediaPresentingDelegate () <PWRichMediaPresentingDelegate>
    @property (nonatomic) NSMutableArray *queue;
    @property (nonatomic) BOOL inAppIsPresenting;
    @end
    @implementation ChainedRichMediaPresentingDelegate
    - (instancetype)init {
    self = [super init];
    if (self) {
    _queue = [NSMutableArray new];
    }
    return self;
    }
    - (BOOL)richMediaManager:(PWRichMediaManager *)richMediaManager shouldPresentRichMedia:(PWRichMedia *)richMedia {
    [_queue addObject:richMedia];
    return !_inAppIsPresenting;
    }
    - (void)richMediaManager:(PWRichMediaManager *)richMediaManager didPresentRichMedia:(PWRichMedia *)richMedia {
    _inAppIsPresenting = YES;
    }
    - (void)richMediaManager:(PWRichMediaManager *)richMediaManager didCloseRichMedia:(PWRichMedia *)richMedia {
    _inAppIsPresenting = NO;
    [_queue removeObject:richMedia];
    if (_queue.count) {
    [[PWRichMediaManager sharedManager] presentRichMedia:_queue.firstObject];
    }
    }
    - (void)richMediaManager:(PWRichMediaManager *)richMediaManager presentingDidFailForRichMedia:(PWRichMedia *)richMedia withError:(NSError *)error {
    [self richMediaManager:richMediaManager didCloseRichMedia:richMedia];
    }
    @end
  2. ডেলিগেট সেট করুন:

    [PWRichMediaManager sharedManager].delegate = [ChainedRichMediaPresentingDelegate new];

ফোর্স টাচ সহ একটি রিচ নোটিফিকেশনে পাঠানো ভিডিও অটো-প্লে করা

Anchor link to

একটি রিচ নোটিফিকেশন অ্যাটাচমেন্ট হিসাবে পাঠানো ভিডিওকে কোনো ব্যবহারকারীর ইন্টারঅ্যাকশন ছাড়াই নোটিফিকেশনটি প্রসারিত করার সময় অটো-প্লে করতে, নীচের পদক্ষেপগুলি অনুসরণ করুন:

  1. আপনার প্রজেক্টে নোটিফিকেশন কন্টেন্ট এক্সটেনশন যোগ করুন:

    • Xcode-এ, File > New > Target নির্বাচন করুন।
    • নোটিফিকেশন কন্টেন্ট এক্সটেনশন বেছে নিন।
    • এটিকে একটি নাম দিন এবং সেটআপ সম্পূর্ণ করুন।
    নোটিফিকেশন কন্টেন্ট এক্সটেনশন - iOS রিচ পুশ নোটিফিকেশন

    যদি “Activate scheme” বার্তা দিয়ে অনুরোধ করা হয়, তাহলে Cancel বেছে নিন।

    নোটিফিকেশন কন্টেন্ট স্কিম সক্রিয় করুন
  2. কন্টেন্ট এক্সটেনশনে বৈশিষ্ট্য এবং পদ্ধতিগুলি নিম্নরূপ সামঞ্জস্য করুন:

    import UIKit
    import UserNotifications
    import UserNotificationsUI
    import AVKit
    class NotificationViewController: UIViewController, UNNotificationContentExtension {
    var playerController: AVPlayerViewController!
    @IBOutlet weak var playerBackgroundView: UIView!
    override func viewDidLoad() {
    super.viewDidLoad()
    // Do any required interface initialization here.
    }
    func didReceive(_ notification: UNNotification) {
    let attachment = notification.request.content.attachments.first
    playerController = AVPlayerViewController()
    // Set height programmatically
    // preferredContentSize.height = 250
    if let url = attachment?.url {
    setupVideoPlayer(url: url)
    } else {
    print("No valid URL...")
    }
    }
    private func setupVideoPlayer(url: URL) {
    guard let playerController = self.playerController else { return }
    let player = AVPlayer(url: url)
    playerController.player = player
    playerController.view.frame = self.playerBackgroundView.bounds
    playerBackgroundView.addSubview(playerController.view)
    addChild(playerController)
    playerController.didMove(toParent: self)
    player.play()
    }
  3. MainInterface.storyboard-এ একটি UIView অন্তর্ভুক্ত করুন:

    MainInterface.storyboard-এ UIView
  4. আপনি এইমাত্র যোগ করা UIView-এর সাথে playerBackgroundView IBOutlet লিঙ্ক করুন:

    UIView-এর সাথে playerBackgroundView IBOutlet লিঙ্ক করুন
  5. নিম্নলিখিত এন্ট্রি দিয়ে info.plist ফাইলটি আপডেট করুন:

    UNNotificationExtensionUserInteractionEnabled = true
    UNNotificationExtensionUserInteractionEnabled = true

আপনার নোটিফিকেশনে একটি ভিডিও সংযুক্ত করার জন্য, কন্ট্রোল প্যানেলের মিডিয়া অ্যাটাচমেন্ট ফিল্ডে ভিডিওর URL ইনপুট করুন:

Pushwoosh কন্ট্রোল প্যানেলের মিডিয়া অ্যাটাচমেন্ট ফিল্ডে ভিডিওর URL

API /createMessage অনুরোধের মাধ্যমে একটি নোটিফিকেশন পাঠানোর সময়, “ios_attachment” প্যারামিটারে URL অন্তর্ভুক্ত করুন এবং নিশ্চিত করুন যে “mutable-content” ফ্ল্যাগটি `1`-এ সেট করা আছে।

কাস্টম পুশ সাউন্ড

Anchor link to

একটি পুশ নোটিফিকেশন পাওয়ার সময় একটি কাস্টম সাউন্ড প্লে করতে, প্রথমে অডিও ফাইলটি আপনার প্রজেক্টের রুট ফোল্ডারে রাখুন।

তারপর, পুশ প্যারামিটারে সাউন্ড ফাইলের নাম উল্লেখ করুন – আপনার বার্তার iOS-নির্দিষ্ট সেটিংস-এর সাউন্ড ফিল্ডটি পূরণ করুন অথবা createMessage API অনুরোধ-এর “ios_sound” প্যারামিটারের মান হিসাবে ফাইলের নাম উল্লেখ করুন।

কাস্টম iOS সাউন্ডের জন্য অডিও ফাইল নিম্নলিখিত ফরম্যাটগুলির মধ্যে একটি হতে হবে: .aif, .caf, .wavফাইলের নামে ফরম্যাট উল্লেখ করতে ভুলবেন না; অন্যথায়, এটি Pushwoosh iOS SDK দ্বারা উপেক্ষা করা হবে।

iOS প্রভিশনাল পুশ

Anchor link to

এটি কিভাবে কাজ করে

Anchor link to

প্রভিশনাল পুশ নোটিফিকেশনগুলি ব্যবহারকারীর নোটিফিকেশন সেন্টারে নিঃশব্দে প্রদর্শিত হয় কিন্তু লক স্ক্রিনে নয়। এই ধরনের পুশগুলি ব্যবহারকারীর দ্বারা স্পষ্টভাবে অনুমতি দেওয়ার প্রয়োজন নেই: আপনি ব্যবহারকারী আপনার অ্যাপ ইনস্টল এবং চালু করার সাথে সাথেই সেগুলি পাঠানো শুরু করতে পারেন।

তবে, ব্যবহারকারীরা এখনও আপনার প্রমিনেন্ট পুশ নোটিফিকেশনে সাবস্ক্রাইব করতে পারেন: প্রভিশনাল পুশ খোলার সময়, তাদের অভিজ্ঞতা বেছে নেওয়ার জন্য দুটি বিকল্প থাকে – সতর্কতা এবং শব্দ ছাড়াই নোটিফিকেশন সেন্টারে পুশ রাখা অথবা আপনাকে প্রমিনেন্টভাবে পুশ পাঠানোর অনুমতি দেওয়া যাতে সেগুলি লক স্ক্রিনে প্রদর্শিত হয়।

প্রভিশনাল পুশগুলি ব্যবহারকারীদের আপনার অ্যাপ থেকে নোটিফিকেশন পেতে চান কিনা সে সম্পর্কে অবগত সিদ্ধান্ত নিতে দেওয়ার জন্য ডিজাইন করা হয়েছে। যেহেতু APN নেটিভ সাবস্ক্রিপশন অনুরোধ ব্যবহারকারীদের শুধুমাত্র একবার দেখানো হয় এবং পরে সাবস্ক্রাইব করার জন্য, তাদের ফোনের সিস্টেম সেটিংসে যেতে হয়, এবং কিছু ব্যবহারকারী সাবস্ক্রাইব নাও করতে পারেন কারণ তারা আপনার পুশগুলির মাধ্যমে কী মূল্য পান সে সম্পর্কে সচেতন নন। প্রভিশনাল পুশগুলি ব্যবহারকারীদের এই বোঝাপড়া দেয়: তারা দেখতে পারে যে আপনি পুশ নোটিফিকেশনে কী কন্টেন্ট সরবরাহ করেন এবং সিদ্ধান্ত নিতে পারে যে তাদের এই কন্টেন্ট সম্পর্কে প্রমিনেন্টভাবে অবহিত করা প্রয়োজন কিনা।

কিভাবে প্রয়োগ করবেন

Anchor link to
  1. গাইড অনুসরণ করে Pushwoosh iOS SDK ইন্টিগ্রেট করুন।

  2. registerForPushNotifications() পদ্ধতি কল করার আগে আপনার প্রজেক্টের AppDelegate-এ নিম্নলিখিত স্ট্রিংটি যোগ করুন:

    if #available(iOS 12.0, *) {
    Pushwoosh.sharedInstance().additionalAuthorizationOptions = UNAuthorizationOptions.provisional
    }

এটাই! অ্যাপ ব্যবহারকারীরা অ্যাপ ইনস্টল করার সাথে সাথেই সরাসরি তাদের নোটিফিকেশন সেন্টারে বার্তা পাবেন।

আমাদের সাথে আপনার মতামত শেয়ার করুন

Anchor link to

আপনার মতামত আমাদের একটি ভালো অভিজ্ঞতা তৈরি করতে সাহায্য করে, তাই SDK ইন্টিগ্রেশন প্রক্রিয়ার সময় আপনার কোনো সমস্যা হলে আমরা আপনার কাছ থেকে শুনতে চাই। যদি আপনি কোনো অসুবিধার সম্মুখীন হন, তাহলে অনুগ্রহ করে এই ফর্মের মাধ্যমে আমাদের সাথে আপনার চিন্তা শেয়ার করতে দ্বিধা করবেন না।