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 অ্যাপ সাইট অ্যাসোসিয়েশন ফাইলটি হোস্ট করুন
আপনার ওয়েব সার্ভারে
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-কে আপনার অ্যাপের বান্ডেল আইডেন্টিফায়ার দিয়ে প্রতিস্থাপন করুন। -
ইউনিভার্সাল লিঙ্কস হ্যান্ডলার প্রয়োগ করুন
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 URLlet components = URLComponents(url: url, resolvingAgainstBaseURL: false)let path = components?.pathif path?.starts(with: "/promotion") == true {// Navigate to promotion screenlet 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 URLNSURLComponents *components = [NSURLComponents componentsWithURL:url resolvingAgainstBaseURL:NO];NSString *path = components.path;if ([path hasPrefix:@"/promotion"]) {// Navigate to promotion screenNSString *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 URLlet components = URLComponents(url: url, resolvingAgainstBaseURL: false)let path = components?.pathif path?.starts(with: "/promotion") == true {// Navigate to promotion screenreturn true}return false}- (BOOL)application:(UIApplication *)applicationcontinueUserActivity:(NSUserActivity *)userActivityrestorationHandler:(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 URLNSURLComponents *components = [NSURLComponents componentsWithURL:url resolvingAgainstBaseURL:NO];NSString *path = components.path;if ([path hasPrefix:@"/promotion"]) {// Navigate to promotion screenreturn YES;}return NO;}
ইউনিভার্সাল লিঙ্ক দিয়ে পুশ পাঠানো
Anchor link toএকটি পুশ নোটিফিকেশন তৈরি করার সময়, Action ফিল্ডে আপনার ওয়েবসাইটের URL ব্যবহার করুন:
https://yourdomain.com/promotion?id=123SDK স্বয়ংক্রিয়ভাবে এই 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 }- (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 নির্বাচন করুন।
- নোটিফিকেশন কন্টেন্ট এক্সটেনশন বেছে নিন।
- এটিকে একটি নাম দিন এবং সেটআপ সম্পূর্ণ করুন।

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

-
কন্টেন্ট এক্সটেনশনে বৈশিষ্ট্য এবং পদ্ধতিগুলি নিম্নরূপ সামঞ্জস্য করুন:
import UIKitimport UserNotificationsimport UserNotificationsUIimport AVKitclass 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.firstplayerController = AVPlayerViewController()// Set height programmatically// preferredContentSize.height = 250if 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 = playerplayerController.view.frame = self.playerBackgroundView.boundsplayerBackgroundView.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 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 ইন্টিগ্রেশন প্রক্রিয়ার সময় আপনার কোনো সমস্যা হলে আমরা আপনার কাছ থেকে শুনতে চাই। যদি আপনি কোনো অসুবিধার সম্মুখীন হন, তাহলে অনুগ্রহ করে এই ফর্মের মাধ্যমে আমাদের সাথে আপনার চিন্তা শেয়ার করতে দ্বিধা করবেন না।