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 शामिल करें:

- 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 इंटीग्रेशन प्रक्रिया के दौरान कोई समस्या आती है तो हम आपसे सुनना पसंद करेंगे। यदि आपको कोई कठिनाई आती है, तो कृपया इस फॉर्म के माध्यम से अपने विचार हमारे साथ साझा करने में संकोच न करें।