অ্যাপ্লিকেশনের পটভূমিতে থাকাকালীন iOS 13.3 এ ডলার রিসিটরেটনোটফিকেশন কল করা হয়নি


10

আমি মাথা ঠাপাচ্ছি আমি পুশ নোটিফিকেশন বাস্তবায়ন করছি। সবকিছু ঠিকঠাক চলছে (ধাক্কা পেয়েছে, ব্যাজ আপডেট হয়েছে) তবে আইওএস 13.3 এর অধীনে অ্যাপ্লিকেশন ব্যাকগ্রাউন্ডে থাকা অবস্থায় অ্যাপ্লিকেশনটি (_: didReLiveRemoteNotifications: fetchCompletionHandler :) কল করা হয় না। অ্যাপ্লিকেশনটি যদি অগ্রভাগে থাকে বা কোনও আইওএস 12 ডিভাইস ব্যবহার করা হয় তবে সেই পদ্ধতিটি বলা হয়। আমি নিম্নলিখিত উপায়ে পুশ বিজ্ঞপ্তির জন্য নিবন্ধন করি:

[[UNUserNotificationCenter currentNotificationCenter] requestAuthorizationWithOptions:(UNAuthorizationOptionBadge | UNAuthorizationOptionSound | UNAuthorizationOptionAlert) completionHandler:^(BOOL granted, NSError * _Nullable error) {
    if (granted) {
        dispatch_async(dispatch_get_main_queue(), ^{
            [[UIApplication sharedApplication] registerForRemoteNotifications];
        });
    }
}];

পে-লোডটি নিম্নলিখিতটিতে সেট করা আছে

{"aps": {
    "badge": 10,
    "alert": "test",
    "content-available": 1
}}

আমি কোনও পরিবর্তন ছাড়াই সমস্ত প্রকরণের (কেবল "রিমোট নোটিফিকেশন" / "ব্যাকগ্রাউন্ড প্রসেসিং", কোনও ক্ষমতা ছাড়াই অ্যাপ্লিকেশন ক্ষমতা হিসাবে "দূরবর্তী বিজ্ঞপ্তিগুলি" এবং "ব্যাকগ্রাউন্ড প্রসেসিং" যুক্ত করার চেষ্টা করেছি) both আমি UNUserNotificationsCenter জন্য প্রতিনিধি সেট কিন্তু আবার সফলতা ছাড়াই। আমি সেই অনুসারে শিরোনামগুলি সেট করেছি:

curl -v \
 -H 'apns-priority: 4' \
 -H 'apns-topic: xx.xxxxx.xxxx' \
 -H 'apns-push-type: alert' \
 -H 'Content-Type: application/json; charset=utf-8' \
 -d '{"aps": {"badge": 10,"alert": "test", "content-available":1}}' \
 --http2 \
 --cert pushcert.pem \
 https://api.sandbox.push.apple.com/3/device/1234567890

দস্তাবেজ থেকে বলা হয়েছে যে অ্যাপটি ব্যাকগ্রাউন্ডে থাকা অবস্থায়ও এই পদ্ধতিটি কল করা হয়:

আপনার অ্যাপের জন্য আগত দূরবর্তী বিজ্ঞপ্তিগুলি প্রক্রিয়া করতে এই পদ্ধতিটি ব্যবহার করুন। অ্যাপ্লিকেশনটির মতো নয়: didReLiveRemoteNotifications: পদ্ধতি, যা কেবল তখনই বলা হয় যখন আপনার অ্যাপ্লিকেশনটি অগ্রভাগে চলমান থাকে, যখন আপনার অ্যাপ্লিকেশনটি পূর্বগ্রাউন্ড বা ব্যাকগ্রাউন্ডে চলমান থাকে তখন সিস্টেমটি এই পদ্ধতিটিকে কল করে।

আইওএস 13 এর জন্য আমি এখানে কী মিস করছি?


আপনি এই পদ্ধতিটি ব্যবহার করছেন কিনা তা পরীক্ষা করুন: developer.apple.com/docamentation/uikit/uiapplicationdelegate/…

1
দয়া করে উপরে দেখুন: সবকিছু ঠিকঠাক চলছে (ধাক্কা পেয়েছে, ব্যাজ আপডেট হয়েছে) তবে আইওএস 13.3 এর অধীনে অ্যাপ্লিকেশনটি ব্যাকগ্রাউন্ডে থাকার সময় পদ্ধতি অ্যাপ্লিকেশন (_: didReLiveRemoteNotifications: fetchCompletionHandler :) বলা হয় না।
মার্টিনডব্লিউ 1985

অ্যাপ্লিকেশন (_: didReLiveRemoteNotifications: fetchCompletionHandler :) আপনি বিজ্ঞপ্তি ব্যানার ট্যাপ করার সময় কল করা হবে

হ্যাঁ, এটি সঠিক। আমার প্রশ্নটি: অ্যাপটি ব্যাকগ্রাউন্ডে থাকা অবস্থায় কেন এটি কল করা হয় না। আমার বোঝাপড়া থেকে ডকস তাই বলে so
মার্টিনডব্লিউ 1985

আপনি কি application(_:didReceiveRemoteNotification:withCompletionHandler:)পদ্ধতি প্রয়োগ করে চেষ্টা করেছেন ?
হার্ডিকস

উত্তর:


2

আপনি সেট করেছেন?

"content-available": 1

আপনার ব্যাকএন্ড এপিএস পে-লোড?

আপনার আইওএস অ্যাপের তথ্য.পল্লিস্ট ফাইলটিতে আপনি ব্যাকগ্রাউন্ড মোড সক্ষম করেছেন তাও নিশ্চিত করা দরকার

<key>UIBackgroundModes</key>
<array>
    <string>processing</string>
    <string>remote-notification</string>
</array>

@ ম্যাটটি সমস্ত উত্তর টাইপ করার আগে পোস্টটি দুর্ঘটনাক্রমে জমা দেওয়া হয়েছিল। এখন এটি অ্যাপের পার্শ্ব পরিবর্তনের সাথে সম্পন্ন হয়েছে।
ঝাং ঝান

1
হ্যা, আমি করেছিলাম. আপনি আমার প্রাথমিক পোস্টে আমার সিআরএল অনুরোধটি দেখতে পাচ্ছেন। আমি "সামগ্রী-উপলভ্য" এও যুক্ত করেছি: 1 এবং সমস্ত ব্যাকগ্রাউন্ড মোডগুলি (সক্ষম, অক্ষম, বিভিন্নতা) চেষ্টা করেছিলাম তবে এখনও অ্যাপ্লিকেশন (_: didReLiveRemoteNotifications: fetchCompletionHandler :) কল হচ্ছে না। কেবলমাত্র অ্যাপটি সক্রিয় থাকলে।
মার্টিনডব্লিউ 1985

<স্ট্রিং> প্রসেসিং </ স্ট্রিং> => এটি ইমপোর্ট্যান্ট লাইন
ডং মাই

@ জাংজাহান: আপনি কি কখনও এই সমস্যার সমাধান করেছেন? আমি একই সমস্যাটিতে চলেছি যেখানে কন্টেন্ট-উপলভ্য কীটি সঠিকভাবে সেট করা সত্ত্বেও নীরব / পটভূমির বিজ্ঞপ্তিগুলি পাওয়া যায় না। আইওএস 12 এ, সবকিছু ঠিকঠাকভাবে কাজ করে তবে আইওএস 13 এ কেবল শ্রুতি / ভিজ্যুয়াল বিজ্ঞপ্তিগুলি কাজ করছে। আমি সচেতন যে অ্যাপল নোটিফিকেশনে অন্তর্ভুক্ত করার জন্য একটি নতুন শিরোলেখার ধরণের প্রয়োজন তবে এটি ইতিমধ্যে পরিচালনা করা হয়েছে (আমরা এসএনএস ব্যবহার করছি)। মজার বিষয় হল, এটি সর্বশেষে এক্সকোড সংস্করণ সহ এপিএনএস ফাইল সহ সিমুলেটারে কাজ করছে না।
whawhat

2

এই সমস্যার উত্তর পেতে আমি একটি সমর্থন টিকিট ব্যয় করি।

দেখা যাচ্ছে যে ডকুমেন্টেশন এই বিষয়ে আইওএস 13 এর জন্য 100% "বৈধ" নয়। জেগে উঠবেন কি না তা ডিভাইসটি স্থির করে। যদিও ডকুমেন্টেশন কিছুটা আলাদা বলছে।

বিজ্ঞপ্তি এক্সটেনশান হিসাবে অ্যাপলের বাস্তবায়নের পছন্দসই পদ্ধতি। এর পরে, আপনাকে "মিউটਟੇਬਲ-সামগ্রী" অন্তর্ভুক্ত করতে পে-লোডটি মানিয়ে নিতে হবে।

আমি সমর্থনটি পরে জিজ্ঞাসা করেছি যদি আমার একটি রাডার ফাইল করা উচিত এবং তারা "হ্যাঁ" দিয়ে জবাব দেয়।


আপনি যদি একটি বিজ্ঞপ্তি এক্সটেনশান সরবরাহ করেন তবে অ্যাপটি কি জেগে আছে?
পিটার লাপিসু

0

অ্যাপল এর এপিএন সার্ভারের সাথে ডিভাইসটি ভাল সংযোগ দেয় কিনা তা পরীক্ষা করতে আপনার অ্যাপ্লিকেশনটির প্রতিনিধিটিকে প্রয়োগ করুন didRegisterForRemoteNotificationsWithDeviceTokenএবং এছাড়াও didFailToRegisterForRemoteNotificationsWithError। যদি এটি না হয় তবে ডিভাইসটি পুনরায় চালু করুন এবং / অথবা অন্য Wi-Fi নেটওয়ার্কের মাধ্যমে সংযোগ স্থাপনের চেষ্টা করুন এবং অ্যাপ্লিকেশনটি পুনরায় চালু করুন।


0

এই প্রতিনিধি পদ্ধতি: -

(void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler

যখন আমরা আইওএস 13 এর জন্য বিজ্ঞপ্তিটি ক্লিক করব তখন অ্যাপ্লিকেশনটি ব্যাকগ্রাউন্ডে আসবে।


1
হ্যাঁ, তবে আমি বিজ্ঞপ্তিটি ক্লিক না করেই পিলোড পাওয়ার কোনও উপায় খুঁজছিলাম।
মার্টিনডব্লিউ 1985

0

আপনাকে একটি বিজ্ঞপ্তি সামগ্রী এক্সটেনশান বাস্তবায়ন করতে হবে

যেহেতু আমি ওয়ান সিগন্যাল ব্যবহার করছিলাম এবং এটির সেটআপ কোডটি, এটি আমার পক্ষে ভাল কাজ করেছে https://docamentation.onesignal.com/docs/ios-sdk-setup

ওয়ানসিগনাল বিটগুলি কোনও পার্থক্য করে কিনা তা নিশ্চিত নন, তবে সেগুলি যেভাবেই সংযোজন করা উচিত

import UserNotifications
import OneSignal

class NotificationService: UNNotificationServiceExtension {

    var contentHandler: ((UNNotificationContent) -> Void)?
    var receivedRequest: UNNotificationRequest!
    var bestAttemptContent: UNMutableNotificationContent?

    override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) {
        self.receivedRequest = request;
        self.contentHandler = contentHandler
        bestAttemptContent = (request.content.mutableCopy() as? UNMutableNotificationContent)

        if let bestAttemptContent = bestAttemptContent {
            OneSignal.didReceiveNotificationExtensionRequest(self.receivedRequest, with: self.bestAttemptContent)
            contentHandler(bestAttemptContent)
        }
    }

    override func serviceExtensionTimeWillExpire() {
        // Called just before the extension will be terminated by the system.
        // Use this as an opportunity to deliver your "best attempt" at modified content, otherwise the original push payload will be used.
        if let contentHandler = contentHandler, let bestAttemptContent =  bestAttemptContent {
            OneSignal.serviceExtensionTimeWillExpireRequest(self.receivedRequest, with: self.bestAttemptContent)
            contentHandler(bestAttemptContent)
        }
    }

}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.