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ইউনিভার্সাল লিঙ্ক ব্যবহারকারীদের আপনার ওয়েবসাইটের একটি লিঙ্কে ট্যাপ করার সাথে সাথে সরাসরি আপনার অ্যাপ খুলতে দেয়। কাস্টম URL স্কিমের বিপরীতে, ইউনিভার্সাল লিঙ্কগুলি স্ট্যান্ডার্ড https:// URL ব্যবহার করে এবং একটি আরও নির্বিঘ্ন ব্যবহারকারীর অভিজ্ঞতা প্রদান করে।
এটি কিভাবে কাজ করে
Anchor link toযখন একটি পুশ নোটিফিকেশনে একটি https:// URL থাকে (“url” বা “l” প্যারামিটারে), SDK যা করবে:
- URL সহ একটি
NSUserActivityতৈরি করবে - আপনার অ্যাপের ইউনিভার্সাল লিঙ্ক হ্যান্ডলারকে কল করবে (
scene:continueUserActivity:বাapplication:continueUserActivity:restorationHandler:) - যদি আপনার অ্যাপ URLটি হ্যান্ডেল না করে, তবে এটি ফলব্যাক হিসাবে Safari-তে খুলবে
সেটআপ
Anchor link to- Xcode-এ অ্যাসোসিয়েটেড ডোমেইন কনফিগার করুন
আপনার অ্যাপে অ্যাসোসিয়েটেড ডোমেইন ক্ষমতা যোগ করুন এবং আপনার ডোমেইন যোগ করুন:
applinks:yourdomain.com- Apple App Site Association ফাইলটি হোস্ট করুন
আপনার ওয়েব সার্ভারে 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 Developer Team ID এবং com.your.bundleid-কে আপনার অ্যাপের বান্ডেল আইডেন্টিফায়ার দিয়ে প্রতিস্থাপন করুন।
- ইউনিভার্সাল লিঙ্ক হ্যান্ডলার ইমপ্লিমেন্ট করুন
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 }}- (void)scene:(UIScene *)scene continueUserActivity:(NSUserActivity *)userActivity { if (![userActivity.activityType isEqualToString:NSUserActivityTypeBrowsingWeb]) { return; }
NSURL *url = userActivity.webpageURL; if (!url) { return; }
// Handle the Universal Link URL NSURLComponents *components = [NSURLComponents componentsWithURL:url resolvingAgainstBaseURL:NO]; NSString *path = components.path;
if ([path hasPrefix:@"/promotion"]) { // Navigate to promotion screen NSString *promotionId = nil; for (NSURLQueryItem *item in components.queryItems) { if ([item.name isEqualToString:@"id"]) { promotionId = item.value; break; } } // 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}- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray<id<UIUserActivityRestoring>> *restorableObjects))restorationHandler {
if (![userActivity.activityType isEqualToString:NSUserActivityTypeBrowsingWeb]) { return NO; }
NSURL *url = userActivity.webpageURL; if (!url) { return NO; }
// Handle the Universal Link URL NSURLComponents *components = [NSURLComponents componentsWithURL:url resolvingAgainstBaseURL:NO]; NSString *path = components.path;
if ([path hasPrefix:@"/promotion"]) { // Navigate to promotion screen return YES; }
return NO;}ইউনিভার্সাল লিঙ্ক সহ পুশ পাঠানো
Anchor link toএকটি পুশ নোটিফিকেশন তৈরি করার সময়, Action ফিল্ডে আপনার ওয়েবসাইটের URL ব্যবহার করুন:
https://yourdomain.com/promotion?id=123SDK স্বয়ংক্রিয়ভাবে এই URLটি আপনার ইউনিভার্সাল লিঙ্ক হ্যান্ডলারে রুট করবে, যা আপনাকে ব্যবহারকারীকে আপনার অ্যাপের উপযুক্ত স্ক্রিনে নেভিগেট করতে দেবে।
ইন-অ্যাপ পারচেজ ট্র্যাকিং
Anchor link toডিফল্টরূপে, ইন-অ্যাপ পারচেজ ট্র্যাকিং নিষ্ক্রিয় করা থাকে। আপনি যদি Customer Journeys কনফিগার করার সময় ইন-অ্যাপ পারচেজ ট্র্যাক করতে চান, তাহলে 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];}
@end- ডেলিগেট সেট করুন:
[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 অন্তর্ভুক্ত করুন:

- playerBackgroundView IBOutlet-টিকে আপনার সদ্য যোগ করা UIView-এর সাথে লিঙ্ক করুন:

- 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 to-
গাইড অনুসরণ করে Pushwoosh iOS SDK ইন্টিগ্রেট করুন।
-
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 ইন্টিগ্রেশন প্রক্রিয়ার সময় আপনার কোনো সমস্যা হলে আমরা আপনার কাছ থেকে শুনতে চাই। আপনি যদি কোনো অসুবিধার সম্মুখীন হন, তাহলে অনুগ্রহ করে এই ফর্মের মাধ্যমে আমাদের সাথে আপনার চিন্তা শেয়ার করতে দ্বিধা করবেন না।