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 को हैंडल नहीं करता है, तो यह एक फॉलबैक के रूप में सफारी में खुल जाएगा
सेटअप
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 डेवलपर टीम 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पुश नोटिफिकेशन बनाते समय, एक्शन फ़ील्ड में अपनी वेबसाइट का URL उपयोग करें:
https://yourdomain.com/promotion?id=123SDK इस URL को स्वचालित रूप से आपके यूनिवर्सल लिंक्स हैंडलर पर रूट करेगा, जिससे आप उपयोगकर्ता को अपने ऐप में उपयुक्त स्क्रीन पर नेविगेट कर सकेंगे।
इन-ऐप खरीदारी ट्रैकिंग
Anchor link toडिफ़ॉल्ट रूप से, इन-ऐप खरीदारी की ट्रैकिंग अक्षम होती है। यदि आप कस्टमर जर्नी को कॉन्फ़िगर करते समय इन-ऐप खरीदारी को ट्रैक करना चाहते हैं, तो info.plist फ़ाइल में Pushwoosh_PURCHASE_TRACKING_ENABLED फ़्लैग को true पर सेट करें। आप उपलब्ध फ़्लैग की सूची तालिका में पा सकते हैं।
यदि आप इन-ऐप खरीदारी को मैन्युअल रूप से ट्रैक करना चाहते हैं, तो आप नीचे दिए गए कोड का उपयोग कर सकते हैं।
paymentQueue:updatedTransactions: delegate विधि में PushManager की sendSKPaymentTransactions method को कॉल करें
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
वैकल्पिक रूप से, आप बस फ्रेमवर्क को अपने प्रोजेक्ट के बिल्ड फेज़ में लिंक बाइनरीज़ विद लाइब्रेरीज़ में ड्रैग और ड्रॉप कर सकते हैं।
- अपनी 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 में, फ़ाइल > नया > लक्ष्य चुनें।
- नोटिफिकेशन कंटेंट एक्सटेंशन चुनें।
- इसे एक नाम दें और सेटअप पूरा करें।

यदि “एक्टिवेट स्कीम” संदेश के साथ संकेत दिया जाता है, तो रद्द करें चुनें।

- कंटेंट एक्सटेंशन में गुणों और विधियों को निम्नानुसार समायोजित करें:
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 अनुरोध के माध्यम से एक नोटिफिकेशन भेजते समय, URL को “ios_attachment” पैरामीटर में शामिल करें और सुनिश्चित करें कि “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 इंटीग्रेशन प्रक्रिया के दौरान कोई समस्या आती है तो हम आपसे सुनना पसंद करेंगे। यदि आपको कोई कठिनाई आती है, तो कृपया इस फ़ॉर्म के माध्यम से अपने विचार हमारे साथ साझा करने में संकोच न करें।