2015-11-26 9 views
10

मैं क्लाउडकिट के साथ एक स्विफ्ट ऐप लिख रहा हूं। जब किसी डिवाइस द्वारा क्लाउडकिट में एक रिकॉर्ड संशोधित किया जाता है, तो मैं पुश अधिसूचना प्रदर्शित किए बिना अन्य उपकरणों के स्थानीय संग्रहण में संबंधित रिकॉर्ड अपडेट करना चाहता हूं।क्लाउडकिट सीकेएस सदस्यता के बिना सूचनाएं?

क्या मुझे में registerUserNotificationSettings पर कॉल करने की आवश्यकता है (जिसका अर्थ है कि उपयोगकर्ता को मेरे ऐप के लिए अधिसूचनाएं स्वीकार करनी होंगी) भले ही मैं कोई पुश अधिसूचना प्रदर्शित करने की योजना नहीं बना रहा हूं?

application.registerUserNotificationSettings(UIUserNotificationSettings(forTypes: .Alert, categories: nil)) 

उत्तर

3

हाँ, आप भी आप सभी की जरूरत पृष्ठभूमि दूरस्थ अधिसूचना है registerUserNotificationSettings कॉल करने की आवश्यकता है। तो अधिसूचना अनुमति के लिए उपयोगकर्ता संकेत मिलेगा। यह कोई समझ में नहीं आता है क्योंकि उपयोगकर्ता नोटिफिकेशन नहीं देख पाएंगे, लेकिन ऐसा ही है।

मैं इस का उपयोग इसे सेट अप करने के लिए:

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { let settings = UIUserNotificationSettings(forTypes: .None , categories: nil) application.registerUserNotificationSettings(settings) application.registerForRemoteNotifications() }

यकीन है कि जब आप CloudKit saveSubscription फोन आप shouldSendContentAvailable = true प्रदान करते हैं। निम्नलिखित कोड एक कस्टम क्षेत्र के लिए सदस्यता के लिए है:

let subscription = CKSubscription(zoneID:zoneID, options: CKSubscriptionOptions(rawValue: 0)) 

let notificationInfo = CKNotificationInfo() 
notificationInfo.shouldSendContentAvailable = true 

subscription.notificationInfo = notificationInfo 

CKContainer.defaultContainer().privateCloudDatabase.saveSubscription(subscription) { subscription, error in 
} 

आप भी अपनी परियोजना के लिए Xcode के तहत पृष्ठभूमि मोड क्षमता को सक्षम करने के लिए, और टिक बॉक्स रिमोट सूचनाएं की जरूरत है।

उपयोगकर्ता आपके ऐप के लिए नोटिफिकेशन अक्षम करने के लिए सेटिंग ऐप पर जा सकता है। लेकिन आपको अभी भी क्लाउडकिट सर्वर द्वारा रिमोट नोटिफिकेशन ट्रिगर प्राप्त होगा।

अपने AppDelegate में निम्नलिखित कार्यों को लागू करें दूरस्थ सूचनाएँ प्राप्त करने के:

func application(application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData) {} 

func application(application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: NSError) {} 

func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject]) {} 
+3

सच नहीं है, मेरा जवाब देखें। – malhal

+0

यह गलत है। malhal जवाब सही है। –

10

इस मामले registerUserNotificationSettings कॉल करने के लिए की जरूरत नहीं है में।

आपको Info.plist सेटिंग "आवश्यक पृष्ठभूमि मोड" (UIBackgroundModes) जोड़ने की आवश्यकता है, "ऐप डाउनलोड पुश नोटिफिकेशन के जवाब में सामग्री डाउनलोड करता है" (remote-notification)। और registerForRemoteNotifications पर भी कॉल करें। अंत में, अपनी सदस्यता पर notificationInfo.shouldSendContentAvailable = YES; सेट करें।

अब जब से आपका ऐप सभी अधिसूचनाओं का जवाब देने के लिए चलाया जा रहा है, इसलिए आपको उस मामले को संभालने के लिए सावधान रहना होगा जहां अधिसूचना मिस जाती है, आप इसका परीक्षण करने के लिए हवाई जहाज मोड का उपयोग कर सकते हैं, केवल अंतिम ही वितरित किया जाता है।

नोट, किसी भी डिवाइस से आपकी सदस्यता बनाने के बाद, application:didReceiveRemoteNotification:fetchCompletionHandler: उसी डिवाइस पर कॉल किया जाएगा जो एक ही iCloud खाते का उपयोग कर रहे हैं और ऐप इंस्टॉल किया गया है।

+1

यह सही उत्तर है। पुश अधिसूचनाओं को अनुमति देने के लिए उपयोगकर्ता को कोई संकेत नहीं है, लेकिन अभी भी उन सूचनाओं को प्राप्त किया जाता है जिन्हें ऐपडिलेगेट द्वारा संभाला जाना आवश्यक है लेकिन कॉलबैक '- (शून्य) आवेदन है: (यूआईएप्लिकेशंस *) एप्लिकेशन किया गया है रिसीव रिमोट नोटिफिकेशन: (NSDictionary *) userInfo fetchCompletionHandler: (शून्य (^) (UIBackgroundFetchResult)) completionHandler'। उत्तर में उल्लिखित कॉलबैक गलत है लेकिन हो सकता है क्योंकि यह वास्तव में पुराना उत्तर है। –

+0

लापता भाग को धन्यवाद – malhal

+1

यदि कोई पृष्ठभूमि में ऐप होने पर अधिसूचित नहीं होना चाहता है और अलर्ट नहीं दिखाता है तो किसी को 'UIBackgroundModes' और संबद्ध उप-कुंजी' रिमोट-अधिसूचना 'जोड़ने की आवश्यकता नहीं है। इस मामले में ऐप को 'एपडिलेगेट' में सामान्य रिमोट अधिसूचना हैंडलर में अधिसूचना मिलती है लेकिन फिर भी पुश अधिसूचनाओं को सक्षम करने के लिए उपयोगकर्ता स्वीकृति संकेत के बिना।तो आवश्यकता के आधार पर दो तरीके हैं। तो क्लाउडकिट अधिसूचनाओं के विशेष मामले के लिए मूल रूप से 'रजिस्टर यूज़र नॉटिफिकेशन सेटिंग्स' को कॉल नहीं किया जाता है। –

संबंधित मुद्दे