iOS SDK কাস্টমাইজ করা
ইন্টিগ্রেশন
Anchor link to- ডিপ লিঙ্কিং
- ইন-অ্যাপ পারচেজ ট্র্যাকিং
- জিওজোন পুশ নোটিফিকেশন
- একটি রিচ মিডিয়া কিউ তৈরি করা
- ফোর্স টাচ সহ একটি রিচ নোটিফিকেশনে পাঠানো ভিডিও অটো-প্লে করা
- কাস্টম পুশ সাউন্ড
- iOS প্রভিশনাল পুশ
ডিপ লিঙ্কিং
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}- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation { NSURLComponents *components = [NSURLComponents componentsWithURL:url resolvingAgainstBaseURL:NO]; NSString *page = components.host; NSString *promotionId = nil;
//return if this is not a promotion deep link if(![page isEqualToString:@"promotion"]) return NO;
for(NSURLQueryItem *item in components.queryItems) { if([item.name isEqualToString:@"id"]) promotionId = item.value; }
PromoPageViewController *vc = [[PromoPageViewController alloc] init]; vc.promotionId = promotionId [self presentViewController:vc animated:YES completion:nil];}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}- (void)scene:(UIWindowScene *)scene openURLContexts:(NSSet<UIOpenURLContext *> *)URLContexts { UIOpenURLContext *urlContext = URLContexts.anyObject; if (!urlContext) { return; }
NSURLComponents *components = [NSURLComponents componentsWithURL:urlContext.URL resolvingAgainstBaseURL:NO]; NSString *page = components.host; NSString *promotionId = nil;
if (![page isEqualToString:@"promotion"]) { return; }
for (NSURLQueryItem *item in components.queryItems) { if ([item.name isEqualToString:@"id"]) { promotionId = item.value; } }
//show PromoPageViewController}ইন-অ্যাপ পারচেজ ট্র্যাকিং
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 }- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions {
[[PushNotificationManager pushManager] sendSKPaymentTransactions:transactions];
//the rest of the code, consume transactions, etc}
জিওজোন পুশ নোটিফিকেশন
Anchor link toজিওজোন পুশ নোটিফিকেশন একটি পৃথক ফ্রেমওয়ার্ক PushwooshGeozones-এর মধ্যে এনক্যাপসুলেট করা আছে।
- আপনার প্রজেক্টে PushwooshGeozones.framework যোগ করুন
একটি ডিপেন্ডেন্সি ম্যানেজার ব্যবহার করে আপনার প্রজেক্টে PushwooshGeozones.framework যোগ করতে, আপনার podfile বা cartfile-এ নিম্নলিখিত লাইনগুলি রাখুন:
pod 'PushwooshXCFramework/Geozones'github "Pushwoosh/pushwoosh-ios-sdk"আপনি যদি PushwooshGeozones.xcframework ব্যবহার করতে চান, তাহলে নিম্নলিখিত প্যাকেজ URL লিখুন:
PushwooshGeozones-XCFramework
বিকল্পভাবে, আপনি কেবল আপনার প্রজেক্টের Build Phases-এ Link Binaries With Libraries-এর মধ্যে ফ্রেমওয়ার্কটি ড্র্যাগ এবং ড্রপ করতে পারেন।
- আপনার 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>- ফ্রেমওয়ার্কটি ইম্পোর্ট করুন
import PushwooshGeozones#import <PushwooshGeozones/PWGeozonesManager.h>- জিওজোন ট্র্যাকিং শুরু করুন
PWGeozonesManager.shared()?.startLocationTracking()[[PWGeozonesManager sharedManager] startLocationTracking];উদাহরণ
Anchor link tooverride func viewDidLoad() { super.viewDidLoad()
// Start Geozones tracking when needed PWGeozonesManager.shared().startLocationTracking()}- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view.
// Start Geozones tracking when needed [[PWGeozonesManager sharedManager] startLocationTracking];}একটি রিচ মিডিয়া কিউ তৈরি করা
Anchor link toযদি একই সাথে একাধিক রিচ মিডিয়া পেজ দেখানোর প্রয়োজন হয় (উদাহরণস্বরূপ, দুই বা ততোধিক ইন-অ্যাপের জন্য ট্রিগার ইভেন্ট একই মুহূর্তে ঘটে, অথবা একটি ভিন্ন ট্রিগার ইভেন্ট ঘটার মুহূর্তে একটি রিচ মিডিয়া পেজ ইতিমধ্যে প্রদর্শিত হচ্ছে), আপনি রিচ মিডিয়া পেজ প্রদর্শনের জন্য একটি কিউ সেট আপ করতে পারেন। একটি কিউ তৈরি করতে, নিচে বর্ণিত পদক্ষেপগুলি অনুসরণ করুন।
- একটি ক্লাস তৈরি করুন যা 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];}
@end2. ডেলিগেট সেট করুন:
[PWRichMediaManager sharedManager].delegate = [ChainedRichMediaPresentingDelegate new];ফোর্স টাচ সহ একটি রিচ নোটিফিকেশনে পাঠানো ভিডিও অটো-প্লে করা
Anchor link toএকটি রিচ নোটিফিকেশন অ্যাটাচমেন্ট হিসাবে পাঠানো একটি ভিডিওকে কোনো ব্যবহারকারীর ইন্টারঅ্যাকশন ছাড়াই নোটিফিকেশন প্রসারিত হলে অটো-প্লে করতে, নিচের পদক্ষেপগুলি অনুসরণ করুন:
- আপনার প্রজেক্টে নোটিফিকেশন কন্টেন্ট এক্সটেনশন যোগ করুন:
- Xcode-এ, File > New > Target নির্বাচন করুন।
- Notification Content Extension বেছে নিন।
- এটিকে একটি নাম দিন এবং সেটআপ সম্পূর্ণ করুন।

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

- কন্টেন্ট এক্সটেনশনে প্রপার্টি এবং মেথডগুলি নিম্নলিখিতভাবে সামঞ্জস্য করুন:
import UIKitimport UserNotificationsimport UserNotificationsUIimport 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() }- MainInterface.storyboard-এ একটি UIView অন্তর্ভুক্ত করুন:

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

- info.plist ফাইলটি নিম্নলিখিত এন্ট্রি দিয়ে আপডেট করুন:
UNNotificationExtensionUserInteractionEnabled = true
আপনার নোটিফিকেশনে একটি ভিডিও সংযুক্ত করতে, কন্ট্রোল প্যানেলের মিডিয়া অ্যাটাচমেন্ট ফিল্ডে ভিডিওর 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 to1. গাইড অনুসরণ করে Pushwoosh iOS SDK ইন্টিগ্রেট করুন।
2. registerForPushNotifications() পদ্ধতি কল করার আগে আপনার প্রজেক্টের AppDelegate-এ নিম্নলিখিত স্ট্রিংটি যোগ করুন:
if #available(iOS 12.0, *) { Pushwoosh.sharedInstance().additionalAuthorizationOptions = UNAuthorizationOptions.provisional}if (@available(iOS 12.0, *)) { [Pushwoosh sharedInstance].additionalAuthorizationOptions = UNAuthorizationOptionProvisional;}এটাই! অ্যাপ ব্যবহারকারীরা অ্যাপ ইনস্টল করার সাথে সাথেই সরাসরি তাদের নোটিফিকেশন সেন্টারে বার্তা পাবেন।
আমাদের সাথে আপনার মতামত শেয়ার করুন
Anchor link toআপনার মতামত আমাদের একটি উন্নত অভিজ্ঞতা তৈরি করতে সাহায্য করে, তাই SDK ইন্টিগ্রেশন প্রক্রিয়ার সময় আপনার কোনো সমস্যা হলে আমরা আপনার কাছ থেকে শুনতে চাই। যদি আপনি কোনো অসুবিধার সম্মুখীন হন, অনুগ্রহ করে আমাদের সাথে আপনার মতামত এই ফর্মের মাধ্যমে শেয়ার করতে দ্বিধা করবেন না।