apple push notifications - stores - UNUserNotificationCenterRecieve प्रतिक्रिया नहीं कहा जाता है अगर ऐप समाप्त हो गया है




iphone store app (2)

यदि यूपी सक्रिय नहीं है (पृष्ठभूमि में भी नहीं, या कहते हैं तो समाप्त हो गया है) UNUserNotificationCenter फ़ंक्शन को 3 डी स्पर्श के बाद अधिसूचना में क्रिया बटन चैट पर क्लिक नहीं किया जाता है। ऐप रद्द कर दिया गया था जब मैं ऐप डीबग करने के लिए Xcode में "नाम से प्रक्रिया के साथ संलग्न" का उपयोग किया। यहां कोड है:

import UIKit
import Mixpanel
import UserNotifications

@UIApplicationMain

class AppDelegate: UIResponder, UIApplicationDelegate, UNUserNotificationCenterDelegate {

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
        //setup mixpanel

        self.handlePushNotificationWithUserInfo(launchOptions: launchOptions)

        //ask for push notification perms
        return true
    }

जब नोटिफिकेशन पॉप-अप (मिक्सपैनल से भेजे गए) इस फ़ंक्शन को पहले कहा जाता है,

कॉल 1:

    func handlePushNotificationWithUserInfo(launchOptions: [NSObject: AnyObject]?) {
        //Handle PushNotification when app is opened
    }

तो यह यहाँ जाता है,

कॉल 2:

    //register for notification
    func application(_ application: UIApplication, didRegister notificationSettings: UIUserNotificationSettings) {

        if #available(iOS 10.0, *) {
            let center = UNUserNotificationCenter.current()
            center.requestAuthorization(options: [.alert, .sound]) { (granted, error) in
                // Enable or disable features based on authorization.
            }
            center.delegate = self

            let actionChat = UNNotificationAction(identifier: Constants.ActionType.CHAT.rawValue, title: "Chat", options: [.foreground])
            let categoryOptions = UNNotificationCategoryOptions(rawValue: 0)
            let customerSupportCategory = UNNotificationCategory(identifier: Constants.NotificationType.CUSTOMER_SUPPORT.rawValue, actions: [actionChat], intentIdentifiers: [], options: categoryOptions)
            center.setNotificationCategories([customerSupportCategory])
        }

        application.registerForRemoteNotifications()
    }

कॉल 3:

    // remote notification
    func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
        ....Some Code....
    }

लेकिन नीचे कार्य नहीं कहा जाता है । लेकिन अगर ऐप पृष्ठभूमि में चल रहा है तो नीचे फ़ंक्शन को बुलाया जाता है और सभी ठीक काम करता है अन्यथा ऐप अग्रभूमि में आता है और चैट इसके बाद नहीं आता है

    // action buttons in enhanced Notification
    @available(iOS 10, *)
    func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: () -> Void) {
        guard let action = Constants.ActionType(rawValue: response.actionIdentifier) else {
            completionHandler()
            return
        }
        switch action {
        case .CHAT:
            _ = self.handleRemoteUrl(NSURL(string: "chat") as? URL)
        default:
            _ = self.handleRemoteUrl(NSURL(string: "chat") as? URL)
        }
        completionHandler()
    }

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

इस फ़ंक्शन को कभी भी नहीं कहा जा सकता क्योंकि यह उपयोगकर्ता नोटिफिकेशन केंद्र () पर आईओएस 10 में घिस रहा है, निश्चित नहीं है। कृपया इसे भी समझाएं ..

    func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject]) {
        ....Some Code....
    }

मैं आईफोन 6 एस आईओएस 10 को डीबगिंग डिवाइस के रूप में इस्तेमाल कर रहा हूं। XCode 8 बीटा -3


अपने स्वयं के प्रयोग से, स्विफ्ट 3 और एक्सकोड 8 में स्थानीय नोटिफिकेशन प्राप्त निम्नानुसार हैं:

अनुरूपता

  • UNUserNotificationCenterDelegate अनुरूप

    class AppDelegate: UIResponder, UIApplicationDelegate, UNUserNotificationCenterDelegate { .... }
  • अधिसूचना केंद्र के प्रतिनिधि के रूप में पंजीकृत करें:

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
    
        let center = UNUserNotificationCenter.current()
        center.delegate = self
    
        return true
    }

प्रतिनिधि विधि

  • मिस्ड नोटिफिकेशन का उत्तर दें (उदाहरण के लिए जब सूचना भेजी जाती है तो उपयोगकर्ता को देखने वाला ऐप)

    func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: (UNNotificationPresentationOptions) -> Void) {
        print(notification.request.content.userInfo)
    }
  • कार्रवाई की गई सूचनाओं का उत्तर दें (जैसे उपयोगकर्ता ने अधिसूचना खोला)

    func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: () -> Void) {
        print(response.notification.request.content.userInfo)
    }

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

// चेक अगर अधिसूचना से शुरू किया गया है

if let notification = launchOptions?[UIApplicationLaunchOptionsRemoteNotificationKey] as? [String: AnyObject] {
       notificationReceived(notification)
    }