ऐप को अग्रभूमि iOS में पुश सूचना प्राप्त करें


190

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

- (void)application:(UIApplication*)application didReceiveRemoteNotification:(NSDictionary*)userInfo

कहा जा रहा है लेकिन अधिसूचना स्क्रीन में सूचना प्रदर्शित नहीं होती है।

मैं अधिसूचना स्क्रीन पर अधिसूचना दिखाना चाहता हूं कि ऐप पृष्ठभूमि या अग्रभूमि में है या नहीं। मैं हल खोज कर थक गया हूं। कोई भी मदद बहुत ही सराहनीय होगी।


35
Apple कहता है : यदि आप अपने ऐप को अग्रभूमि में चलाते समय स्थानीय या दूरस्थ सूचनाएं प्राप्त करते हैं, तो आप अपने उपयोगकर्ताओं को ऐप-विशिष्ट तरीके से जानकारी पारित करने के लिए जिम्मेदार हैं।
लॉरी लेहमीजोकी

2
कुछ अप-टू-डेट (अक्टूबर "16) सेब लिंक: यहाँ , वहाँ और वहाँ
azmeuk

1
आईओएस 9.3 और उससे कम के लिए पुश अधिसूचना का अग्रभूमि समर्थन नहीं है?
अनुराग शर्मा

@ गौरी लेहमिजोकी लिंक? मुझे वह आधिकारिक वेबसाइट पर नहीं मिला
व्याचेस्लाव गेर्चिकोव जूल

1
मैं आयनिक में इसी समस्या का सामना कर रहा हूं ...
सईद मोहम्मद अली

जवाबों:


204

एप्लिकेशन अग्रभूमि में है, जबकि बैनर संदेश प्रदर्शित करने के लिए, निम्नलिखित विधि का उपयोग करें।

iOS 10, स्विफ्ट 3/4 :

// This method will be called when app received push notifications in foreground
func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) 
{
    completionHandler([.alert, .badge, .sound])
}

iOS 10, स्विफ्ट 2.3 :

@available(iOS 10.0, *)
func userNotificationCenter(center: UNUserNotificationCenter, willPresentNotification notification: UNNotification, withCompletionHandler completionHandler: (UNNotificationPresentationOptions) -> Void)
{
    //Handle the notification
    completionHandler(
       [UNNotificationPresentationOptions.Alert,
        UNNotificationPresentationOptions.Sound,
        UNNotificationPresentationOptions.Badge])
}

आपको सूचना केंद्र के प्रतिनिधि के रूप में अपना ऐप प्रतिनिधि भी पंजीकृत करना होगा:

import UserNotifications

// snip!

class AppDelegate : UIResponder, UIApplicationDelegate, UNUserNotificationCenterDelegate

// snip!

   func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {

      // set the delegate in didFinishLaunchingWithOptions
      UNUserNotificationCenter.current().delegate = self
      ...
   }

इस विधि को कब कहा जाता है?
उमा माधवी

कृपया मुझे मार्गदर्शन करें कि जब मेरा ऐप बैकग्राउंड या अग्रभूमि हो तो मैं ऊपर से अधिसूचना प्रदर्शित कर रहा हूं। 2 सप्ताह बाद मैं पुश सूचनाओं के साथ काम कर रहा हूं। मैं सर्वर से संदेश प्राप्त कर सकता हूं।
उमा माधवी

@UmaMadhavi क्या आप पुश सूचनाएँ प्राप्त कर सकते हैं?
चेंगसम

21
एप्लिकेशन प्रतिनिधि के रूप में अधिसूचना केंद्र प्रतिनिधि को सेट करने के लिए मत भूलना: UNUserNotificationsCenter.current().delegate = selfआवेदन में किया थाफिनिशलॉन्चिंगविशेषताएं
अचिंत्य अशोक

2
जो लोग अभी भी संघर्ष कर रहे हैं, उनके UNUserNotificationCenter केंद्र से पहले 's' के साथ UNUserNotificationsCenter नहीं है
राज

58

नीचे दिया गया कोड आपके लिए काम करेगा:

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo  {
    application.applicationIconBadgeNumber = 0;             
    //self.textView.text = [userInfo description];
    // We can determine whether an application is launched as a result of the user tapping the action
    // button or whether the notification was delivered to the already-running application by examining
    // the application state.

    if (application.applicationState == UIApplicationStateActive) {                
        // Nothing to do if applicationState is Inactive, the iOS already displayed an alert view.                
        UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Did receive a Remote Notification" message:[NSString stringWithFormat:@"Your App name received this notification while it was running:\n%@",[[userInfo objectForKey:@"aps"] objectForKey:@"alert"]]delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
        [alertView show];          
    }    
}

यह काम। यह क्या करता है इसके बारे में थोड़ी और जानकारी; जब अनुप्रयोग अग्रभूमि में होता है, तो उसके भीतर अधिसूचना पाठ के साथ एक मूल UI अलर्ट बॉक्स दिखाई देता है (यह titleथोड़ा बड़ा बोल्ड पाठ है, और इसके messageतहत छोटा पाठ है। खारिज करने के लिए एक 'ओके' बटन सबसे नीचे है)। विकल्प एप्लिकेशन आईकॉनबेडगेनंबर को 0 पर सेट किया जा रहा है, जो उस नंबर को छिपाने के लिए है जो स्प्रिंगबोर्ड में ऐप आइकन के शीर्ष पर दिखाई देता है (उदाहरण के लिए एक मेल ऐप में अपठित संदेशों की संख्या को दर्शाता है)। इस उदाहरण में, मुझे नहीं पता कि क्या विकल्प की आवश्यकता है।
jwinn

क्या यह UNnotification और UILocalNotification दोनों के लिए काम करता है?
user6631314

38

किसी के लिए भी दिलचस्पी हो सकती है, मैंने एक कस्टम दृश्य तैयार किया है जो शीर्ष पर सिस्टम पुश बैनर जैसा दिखता है, लेकिन एक करीबी बटन (छोटा नीला एक्स) और कस्टम कार्रवाई के लिए संदेश को टैप करने का एक विकल्प जोड़ता है। यह उपयोगकर्ता द्वारा पुराने लोगों को पढ़ने / खारिज करने के लिए समय से पहले एक से अधिक अधिसूचना के मामले का भी समर्थन करता है (कोई सीमा नहीं है कि कितने को ढेर कर सकते हैं ...)

GitHub से लिंक करें: AGPushNote

उपयोग मूल रूप से लाइनर पर है:

[AGPushNoteView showWithNotificationMessage:@"John Doe sent you a message!"];

और यह iOS7 पर ऐसा दिखता है (iOS6 एक iOS6 देखो और महसूस करो ...)

यहां छवि विवरण दर्ज करें


1
इसके अलावा अब स्विफ्ट में फिर से
लिखा

अच्छा be यह उपयोगी होगा।
无 之

36

उद्देश्य सी

यहां छवि विवरण दर्ज करें

के लिए iOS 10हमें willPresentNotificationशो अधिसूचना बैनर के लिए एकीकृत विधि की आवश्यकता है foreground

यदि अग्रभूमि मोड में ऐप (सक्रिय)

- (void)userNotificationCenter:(UNUserNotificationCenter* )center willPresentNotification:(UNNotification* )notification withCompletionHandler:(void (^)(UNNotificationPresentationOptions options))completionHandler {
    NSLog( @“Here handle push notification in foreground" ); 
    //For notification Banner - when app in foreground

    completionHandler(UNNotificationPresentationOptionAlert);

    // Print Notification info
    NSLog(@"Userinfo %@",notification.request.content.userInfo);
}

1
बस कोड को कॉपी करें और UNUserNotificationCenterDelegate प्रोटोकॉल का उपयोग करना न भूलें।
निक कोव

अगर मैं इस अधिसूचना के बजाय अलर्ट दिखाना चाहता हूं तो?
मिहिर ओझा

@ मिहिरोजा आप यूआईएलर्टकंट्रोलर चाहते हैं?
अश्विनी चौगले

मुझे पता है, लेकिन ऐप के सक्रिय होने पर मुझे नोटिफिकेशन पॉपअप नहीं चाहिए। मैं अपने ऐप में केवल अलर्ट चाहता हूं।
मिहिर ओझा

24

यदि एप्लिकेशन अग्रभूमि में चल रहा है, तो iOS एक सूचना बैनर / अलर्ट नहीं दिखाएगा। वह डिजाइन द्वारा है। लेकिन हम इसे UILocalNotificationनिम्नानुसार उपयोग करके प्राप्त कर सकते हैं

  • जांचें कि क्या दूरस्थ
    अधिसूचना प्राप्त करने पर एप्लिकेशन सक्रिय स्थिति में है । यदि सक्रिय राज्य में एक UILocalNotification आग।

    if (application.applicationState == UIApplicationStateActive ) {
    
        UILocalNotification *localNotification = [[UILocalNotification alloc] init];
        localNotification.userInfo = userInfo;
        localNotification.soundName = UILocalNotificationDefaultSoundName;
        localNotification.alertBody = message;
        localNotification.fireDate = [NSDate date];
        [[UIApplication sharedApplication] scheduleLocalNotification:localNotification];
    }

स्विफ्ट:

if application.applicationState == .active {
    var localNotification = UILocalNotification()
    localNotification.userInfo = userInfo
    localNotification.soundName = UILocalNotificationDefaultSoundName
    localNotification.alertBody = message
    localNotification.fireDate = Date()
    UIApplication.shared.scheduleLocalNotification(localNotification)
}

86
मुझे नहीं लगता कि इससे मदद मिलेगी। स्थानीय और दूरस्थ सूचनाओं के साथ एक ही व्यवहार किया जाता है और परिणामस्वरूप जब यह स्थानीय अधिसूचना बंद हो जाती है और यदि ऐप चल रहा है तो बैज / बैनर या ध्वनि नहीं दिखाई जाएगी / खेली जाएगी।
आरपीएम

3
यह iOS अधिसूचना केंद्र
Ab'initio

3
हालाँकि मैं एक धक्का अधिसूचना आने पर एक स्थानीय अधिसूचना लॉन्च नहीं करेगा। मैं @ रिकॉन्क का उल्लेख करने के बजाय एक समान व्यवहार लॉन्च करूंगा: एक चेतावनी या कुछ टोस्टर दिखा रहा हूं। मुझे लगता है कि मुझे ऑपरेटिंग सिस्टम के माध्यम से फिर से कुछ करने की ज़रूरत नहीं है जो ऑपरेटिंग सिस्टम मुझे संभालने के लिए कह रहा है।
फैबियो ओलिवेरा

3
यह समाधान काम कर रहा है, क्योंकि स्थानीय और रिमोट उसी तरह से संभाले जाते हैं, जहां ऐप जब अग्रभूमि में होता है, तो रिमोट नोटिफिकेशन आने पर लोकेशन नोटिफिकेशन बनाकर कोई चीज नहीं दिखाई देगी। अलर्ट या कस्टम अलर्ट का उपयोग करना समाधान है
हैमर

18
यह वास्तव में काम नहीं करता है। UILocalNotification डॉक्स से:If the app is foremost and visible when the system delivers the notification, the app delegate’s application:didReceiveLocalNotification: is called to process the notification. Use the information in the provided UILocalNotification object to decide what action to take. The system does not display any alerts, badge the app’s icon, or play any sounds when the app is already frontmost.
क्रिस मोर्स

15

यदि एप्लिकेशन अग्रभूमि में चल रहा है, तो iOS एक सूचना बैनर / अलर्ट नहीं दिखाएगा। वह डिजाइन द्वारा है। आपको अपने ऐप की स्थिति से निपटने के लिए कुछ कोड लिखना होगा, जबकि यह अग्रभूमि में है। आपको अधिसूचना को सबसे उपयुक्त तरीके से दिखाना चाहिए (उदाहरण के लिए, UITabBarआइकन में बैज नंबर जोड़ना , अधिसूचना केंद्र बैनर का अनुकरण करना, आदि)।


1
लेकिन आईओएस मेल एप्लिकेशन में उन्होंने ऐसा किया है, आपको नए नोटिफिकेशन बैनर / अलर्ट
मिलेंगे

3
@ Ab'initio मैं निश्चित रूप से नहीं जानता, लेकिन iOS में सभी एप्लिकेशन समान नहीं बनाए गए हैं। मुझे लगता है स्टॉक मेल ऐप कुछ प्रकार के निजी एपीआई का उपयोग कर रहा है जो कि सार्वजनिक एसडीके में उपलब्ध नहीं है। या हो सकता है कि नोटिफिकेशन कोड Apple के मेल ऐप आईडी के साथ अपवाद बना रहा हो।
डैनियल मार्टिन

1
क्या?? मैं एक कठोर क्रोधी हमला करने वाला हूं।
जोश

@ डैनियलमार्टिन मुझे बता सकता है कि मैं आईओएस 8.0 में
दिलीप

10
ध्यान रखें कि यह उत्तर केवल iOS 9 और उससे कम के लिए सही है । IOS 10 के बाद से, Apple ने नोटिफिकेशन ( UNUserNotificationCenter API) को संभालने के लिए एक नया API पेश किया । नए एपीआई के साथ, अब यह संभव है कि यदि एप्लिकेशन अग्रभूमि में है, तो सूचनाओं को दिखाना संभव है। इसलिए यदि आप भ्रमित हैं क्योंकि इस प्रश्न के अलग-अलग उत्तर हैं, ऐसा इसलिए है क्योंकि कुछ उत्तर बहुत पुराने हैं, और केवल iOS 9 और उससे पहले के व्यवहार का वर्णन करते हैं, जबकि अन्य यह ध्यान नहीं रखते हैं कि UNUserNotificationCenter यह केवल उपलब्ध है iOS 10.
तंबाकू

12

Xcode 10 स्विफ्ट 4.2

पुश सूचना दिखाने के लिए जब आपका ऐप अग्रभूमि में हो -

चरण 1: AppDelegate वर्ग में प्रतिनिधि UNUserNotificationCenterDelegate जोड़ें।

class AppDelegate: UIResponder, UIApplicationDelegate, UNUserNotificationCenterDelegate {

चरण 2: UNUserNotificationCenter प्रतिनिधि सेट करें

let notificationCenter = UNUserNotificationCenter.current()
notificationCenter.delegate = self

चरण 3: यह चरण आपके ऐप को पुश सूचना को तब भी दिखाने की अनुमति देगा जब आपका ऐप अग्रभूमि में हो

func userNotificationCenter(_ center: UNUserNotificationCenter,
                                willPresent notification: UNNotification,
                                withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
        completionHandler([.alert, .sound])

    }

चरण 4: यह चरण वैकल्पिक है । जांचें कि क्या आपका ऐप अग्रभूमि में है और यदि वह अग्रभूमि में है, तो लोकल पुशॉटिफिकेशन दिखाएं।

func application(_ application: UIApplication,didReceiveRemoteNotification userInfo: [AnyHashable: Any],fetchCompletionHandler completionHandler:@escaping (UIBackgroundFetchResult) -> Void) {

        let state : UIApplicationState = application.applicationState
        if (state == .inactive || state == .background) {
            // go to screen relevant to Notification content
            print("background")
        } else {
            // App is in UIApplicationStateActive (running in foreground)
            print("foreground")
            showLocalNotification()
        }
    }

स्थानीय अधिसूचना समारोह -

fileprivate func showLocalNotification() {

        //creating the notification content
        let content = UNMutableNotificationContent()

        //adding title, subtitle, body and badge
        content.title = "App Update"
        //content.subtitle = "local notification"
        content.body = "New version of app update is available."
        //content.badge = 1
        content.sound = UNNotificationSound.default()

        //getting the notification trigger
        //it will be called after 5 seconds
        let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 1, repeats: false)

        //getting the notification request
        let request = UNNotificationRequest(identifier: "SimplifiedIOSNotification", content: content, trigger: trigger)

        //adding the notification to notification center
        notificationCenter.add(request, withCompletionHandler: nil)
    }

1
यह सभी उत्तरों को एक सूत्र में पढ़ने की आवश्यकता का एक बड़ा उदाहरण है। पहले थ्रेड्स विधि का उल्लेख करते हैं, प्रतिनिधि की तुलना में और अंत में यह एक तीन सभी चरण जो आपको बनाने की आवश्यकता है। पूर्ण उत्तर के लिए धन्यवाद!
user3069232

यह जानकर अच्छा लगा कि इससे आपको मदद मिली। हैप्पी कोडिंग
प्रशांत गायकवाड़

10

ऐप्पल डॉक्यूमेंटेशन के अनुसार , ऐप चलने के दौरान आप नोटिफिकेशन दिखा सकते हैंयहां छवि विवरण दर्ज करें


मैं एप्लिकेशन प्रतिनिधि या विशेष वर्ग में या तो उस फ़ंक्शन को कहां लिख सकता हूं ??
iOS डेवलपर

क्या होगा अगर मैं उस मेथड को देखने के लिए लोड करना चाहता हूँ ??
iOS डेवलपर

आप किसी भी जगह पर लिख सकते हैं, लेकिन यह शर्त है कि यह UNUserNotificationCenterDelegateप्रोटोकॉल के अनुरूप होना चाहिए
9

आप में नहीं लिख सकते हैंviewDidLoad
SPatel

1
मैं आपको extension AppDelegate: UNUserNotificationCenterDelegate
SPatel

9

आप अपना स्वयं का नोटिफिकेशन बना सकते हैं जो बैनर अलर्ट की नकल करता है।

एक तरीका यह है कि एक कस्टम यूआईवीवाई बनाया जाए जो बैनर की तरह दिखता है और जो छूकर जवाब दे सकता है। इसे ध्यान में रखते हुए आप और भी अधिक कार्यक्षमता के साथ बेहतर बैनर बना सकते हैं।

या आप एक एपी की तलाश कर सकते हैं जो आपके लिए करता है और उन्हें आपके प्रोजेक्ट में पॉडफाइल्स के रूप में जोड़ देता है।

यहाँ एक जोड़ी है जिसका मैंने उपयोग किया है:

https://github.com/terryworona/TWMessageBarManager

https://github.com/toursprung/TSMessages


1
हालांकि यह लिंक प्रश्न का उत्तर दे सकता है, लेकिन उत्तर के आवश्यक भागों को शामिल करना और संदर्भ के लिए लिंक प्रदान करना बेहतर है। लिंक-केवल उत्तर अमान्य हो सकते हैं यदि लिंक किए गए पृष्ठ बदल जाते हैं।
रॉबर्ट

1
TWMessageBarManagerइसे आसानी से लागू किया जा सकता है और इसे एप्लाइड के माध्यम से उपयोग किया जा सकता है क्योंकि यह सिंगलटन डिजाइन पैटर्न का उपयोग करता है। लिंक के लिए धन्यवाद।
जे मायु

8

जब सक्रिय अवस्था (अग्रभूमि या खुले) में ऐप होने पर पुश सूचना प्राप्त करने का कोड यहाँ होता है। UNUserNotificationCenter प्रलेखन

@available(iOS 10.0, *)
func userNotificationCenter(center: UNUserNotificationCenter, willPresentNotification notification: UNNotification, withCompletionHandler completionHandler: (UNNotificationPresentationOptions) -> Void)
{
     completionHandler([UNNotificationPresentationOptions.Alert,UNNotificationPresentationOptions.Sound,UNNotificationPresentationOptions.Badge])
}

यदि आपको अधिसूचना उपयोग कोड के userInfo तक पहुंचने की आवश्यकता है: notification.request.content.userInfo


इस फ़ंक्शन को देखने के लिए लोड कहाँ किया गया था? या नियंत्रक वर्ग को देखने में?
iOS डेवलपर

क्या होगा अगर मैं इसे फ़ंक्शन में नेस्टेड फ़ंक्शन के रूप में कह सकता हूं तो इसे कहा जाएगा> ??
iOS डेवलपर

1
इस AppDelegate वर्ग में डाल दिया। आपको इस फ़ंक्शन को कॉल करने की आवश्यकता नहीं है।
मिलान जयवर्धने

4

उस पूर्णहैंडलर लाइन को प्रतिनिधि विधि में जोड़ने से मेरे लिए वही समस्या हल हो गई:

//Called when a notification is delivered to a foreground app.
@available(iOS 10.0, *)
func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {

completionHandler([.alert, .badge, .sound])
} 

3

PushNotification शब्दकोश को पार्स करने के लिए 5 से तेज के लिए

    func application(_ application: UIApplication, didReceiveRemoteNotification data: [AnyHashable : Any]) {
            if application.applicationState == .active {
                if let aps1 = data["aps"] as? NSDictionary {
                    if let dict = aps1["alert"] as? NSDictionary {
                        if let strTitle = dict["title"] as? String , let strBody = dict["body"] as? String {
                            if let topVC = UIApplication.getTopViewController() {
                                //Apply your own logic as per requirement
                                print("strTitle ::\(strTitle) , strBody :: \(strBody)")
                            }
                        }
                    }
                }
            }
        }

शीर्ष व्यू कॉन्ट्रोलर लाने के लिए जिस पर हम टॉपबैनर दिखाते हैं

extension UIApplication {

    class func getTopViewController(base: UIViewController? = UIApplication.shared.keyWindow?.rootViewController) -> UIViewController? {

        if let nav = base as? UINavigationController {
            return getTopViewController(base: nav.visibleViewController)

        } else if let tab = base as? UITabBarController, let selected = tab.selectedViewController {
            return getTopViewController(base: selected)

        } else if let presented = base?.presentedViewController {
            return getTopViewController(base: presented)
        }
        return base
    }
}

guardबयान अपने दोस्त :-) है
निकोलस Miari

2

अपने ऐप में प्रतिनिधि डेल्टो कोड का उपयोग करें

import UIKit
import UserNotifications
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate, UNUserNotificationCenterDelegate {
 var currentToken: String?
 var window: UIWindow?
 func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        // Override point for customization after application launch.
        application.registerForRemoteNotifications()
        let center = UNUserNotificationCenter.current()
        center.requestAuthorization(options: [.alert, .sound, .badge]) { (granted, error) in

            // Enable or disable features based on authorization.
            if granted == true
            {
                print("Allow")
                UIApplication.shared.registerForRemoteNotifications()
            }
            else
            {
                print("Don't Allow")
            }
        }
        UNUserNotificationCenter.current().delegate = self

        return true
    }
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data){
        let tokenParts = deviceToken.map { data -> String in
            return String(format: "%02.2hhx", data)
        }
        let token = tokenParts.joined()
        currentToken = token  //get device token to delegate variable

    }
 public class var shared: AppDelegate {
        return UIApplication.shared.delegate as! AppDelegate
    }
 func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
         completionHandler([.alert, .badge, .sound])
    }
}

0

जैसा कि ऊपर उल्लेख किया गया है, आपको इसे UserNotification.frameworkप्राप्त करने के लिए उपयोग करना चाहिए । लेकिन मेरे उद्देश्यों के लिए मुझे इसे ऐप में वैसे भी दिखाना होगा और iOS 11स्टाइल करना चाहिए , इसलिए मैंने एक छोटा सहायक दृश्य बनाया है, शायद किसी के लिए उपयोगी होगा।

GitHub iOS 11 पुश नोटिफिकेशन व्यू


0

इसके लिए सर्वश्रेष्ठ दृष्टिकोण का उपयोग करके जोड़ना है UNUserNotificationCenterDelegate। यह विस्तार बताता है कि AppDelegateउपयोग में extension AppDelegate: UNUserNotificationCenterDelegateआने पर एप्लिकेशन को अधिसूचना प्राप्त करने में सक्षम होना चाहिए

और इस विधि को लागू करें

func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
        completionHandler(.alert)
    }

यह विधि प्रतिनिधि पर तभी बुलाई जाएगी जब आवेदन फ़ोरग्राउंड में हो

तो अंतिम कार्यान्वयन:

extension AppDelegate: UNUserNotificationCenterDelegate {
    func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
        completionHandler(.alert)
    }
}

और इसे कॉल करने के लिए आपको didFinishLaunchingWithOptionsइस लाइन को जोड़ने में AppDelegate में प्रतिनिधि को सेट करना होगा

UNUserNotificationCenter.current().delegate = self

आप संशोधित कर सकते हैं

completionHandler(.alert) 

साथ में

completionHandler([.alert, .badge, .sound]))

0

स्विफ्ट 5 के लिए

1) AppDelegate के साथ प्रतिनिधि की पुष्टि करें UNUserNotificationCenterDelegate

2) UNUserNotificationCenter.current().delegate = selfमेंdidFinishLaunch

3) में विधि के नीचे लागू करें AppDelegate

func userNotificationCenter(_ center: UNUserNotificationCenter,
                                willPresent notification: UNNotification,
                                withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
     print("Push notification received in foreground.")
     completionHandler([.alert, .sound, .badge])
}

बस!


-2

@Danial मार्टीन ने कहा कि iOS एक सूचना बैनर / अलर्ट नहीं दिखाएगा। वह डिजाइन द्वारा है। लेकिन अगर वास्तव में करना है तो एक तरीका है। मैंने भी यही हासिल किया है।

1. पार्स फ्रेमवर्क से पार्स फ्रेम का काम डाउनलोड करें

2.Import #import <Parse/Parse.h>

3. अपने didReceiveRemoteNotification विधि के लिए निम्नलिखित कोड जोड़ें

 - (void)application:(UIApplication *)application
didReceiveRemoteNotification:(NSDictionary *)userInfo
{
    [PFPush handlePush:userInfo];
}

पीएफपीयूश ध्यान रखेगा कि रिमोट अधिसूचना को कैसे संभालना है। यदि ऐप अग्रभूमि में है तो यह अलर्ट दिखाता है अन्यथा यह शीर्ष पर सूचना दिखाता है।


चेतावनी? आप एक सतर्क दृष्टिकोण का मतलब है?
आईपॉन्ड्रॉयड

1
लेकिन अलर्ट बटन क्रियाओं के लिए कॉल बैक कैसे करें
चार्ली

-2

यदि आपका एप्लिकेशन अग्रभूमि स्थिति में है, तो इसका मतलब है कि आप वर्तमान में उसी ऐप का उपयोग कर रहे हैं। इसलिए आमतौर पर शीर्ष पर अधिसूचना दिखाने की आवश्यकता नहीं है।

लेकिन फिर भी यदि आप उस स्थिति में सूचना दिखाना चाहते हैं तो आपको अपने कस्टम अलर्ट को देखना होगा या कस्टम व्यू जैसे टोस्ट या किसी अन्य चीज़ को उपयोगकर्ता को दिखाना होगा कि आपको नोटिफिकेशन मिल गया है।

यदि आप अपने ऐप में इस तरह की सुविधा रखते हैं, तो आप शीर्ष पर एक बैज भी दिखा सकते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.