App does not launch by data FCM

Hi all,

We used to launch our app in background by a silent FCM push and the app will display a local notification or does other jobs. It works in general.

However, in one case, a iphone SE2 at iOS15.0.1, the app does not launch when a push is got. Checking out the console log, we have:

16:12:40.559604+0800	dasd	Submitted Activity: com.apple.pushLaunch.com.hkt-starhomecall.ios.app:92F900 at priority 5 <private>
16:12:40.559921+0800	runningboardd	[daemon<com.apple.dasd>:100] handle lookup could not find a matching process
16:12:40.560240+0800	dasd	Error obtaining RBS process handle: Error Domain=RBSRequestErrorDomain Code=3 UserInfo={NSLocalizedFailureReason=<private>}
16:12:40.561398+0800	dasd	Adding a launch request (<private>) for application <private> by activity <private>
16:12:40.561577+0800	dasd	Launch requests for <private>: <private>
16:12:40.561706+0800	dasd	Daemon Canceling Activities: {(
    com.apple.pushLaunch.com.hkt-starhomecall.ios.app:58E563
)}
16:12:40.561836+0800	dasd	CANCELED: com.apple.pushLaunch.com.hkt-starhomecall.ios.app:58E563 at priority 5 <private>!
16:12:40.561950+0800	dasd	Removing a launch request for application <private> by activity <private>
16:12:40.565382+0800	SpringBoard	cancelActivities: 1 activities were not found: <private>
16:12:40.568732+0800	runningboardd	[daemon<com.apple.dasd>:100] handle lookup could not find a matching process
16:12:40.569402+0800	dasd	Error obtaining RBS process handle: Error Domain=RBSRequestErrorDomain Code=3 UserInfo={NSLocalizedFailureReason=<private>}
16:12:40.571141+0800	dasd	com.apple.pushLaunch.com.hkt-starhomecall.ios.app:92F900:[
	{name: ApplicationPolicy, policyWeight: 50.000, response: {Decision: Absolutely Must Not Proceed, Score: 0.00, Rationale: [{[pushDisallowed]: Required:1.00, Observed:0.00},]}}
 ], FinalDecision: Absolutely Must Not Proceed}

The dasd seems refused to launch our app somehow with a

Rationale: [{[pushDisallowed]

. What does that mean? And what can we do?

P.S. my FCM payload would be something like

didReceiveRemoteNotification: userInfo {
    aps =     {
        "content-available" = 1;
    };
    "gcm.message_id" = 1633942901629592;
    "google.c.fid" = ddjGQwTik02Fh6agnjGhWm;
    "google.c.sender.id" = 1056180720554;
    notificationRequest = "home.link.update.block.history.list";
    payload = "{\"logCalls\":[{\"duration\":0,\"blockedCategory\":\"2\",\"otherSideNumber\":\"24268975\",\"blockedName\":\"\U96fb\U8a0a\U5ee3\U64ad\",\"callOrigninationDateTime\":1633942901605,\"recordedDuration\":0,\"callResult\":\"B\",\"callOriginationDateTime\":1633942901605}],\"notificationDeviceUuids\":[\"9ba61840-c573-46b7-af31-9f51d7f9ed41\",\"ef8a7828-4c07-4187-bd47-ef1cfb440dee\"]}";
}

Regards,

Charles Chan

I'm having this issue only since updating to iOS 15.3. On 15.2.1 I didn't have such issues.

My app can receive one (or a few) silent push notifications after a reboot (launching the app from Xcode), but after that there are no more notifications delivered to my app.

In the logs I see

com.apple.pushLaunch.MY.APP.ID:BC0525:[
	{name: ApplicationPolicy, policyWeight: 50.000, response: {Decision: Absolutely Must Proceed, Score: 1.00, Rationale: [{[appIsForeground]: Required:1.00, Observed:1.00},]}}
	{name: CPUUsagePolicy, policyWeight: 5.000, response: {Decision: Must Not Proceed, Score: 0.00, Rationale: [{[Max allowed CPU Usage level]: Required:50.00, Observed:95.00},]}}
	{name: DataBudgetPolicy, policyWeight: 1.000, response: {Decision: Must Not Proceed, Score: 0.00, Rationale: [{remainingBudget == 546133.3333333358 AND projectedUsage == 5242880 AND percentage == 0.1}]}}
	{name: NetworkQualityPolicy, policyWeight: 11.400, response: {Decision: Must Not Proceed, Score: 0.00, Rationale: [{[wifiQuality]: Required:50.00, Observed:0.00},{[cellQuality]: Required:50.00, Observed:0.00},{[networkPathAvailability]: Required:1.00, Observed:1.00},]}}

 ], FinalDecision: Absolutely Must Proceed}

shortly before receiving the call to didReceiveRemoteNotification.

But a few seconds later there is a log like this one:

com.apple.pushLaunch.MY.APP.ID:A018AC:[
	{name: ApplicationPolicy, policyWeight: 50.000, response: {Decision: Absolutely Must Not Proceed, Score: 0.00, Rationale: [{[pushDisallowed]: Required:0.00, Observed:1.00},]}}
	{name: CPUUsagePolicy, policyWeight: 5.000, response: {Decision: Must Not Proceed, Score: 0.00, Rationale: [{[Max allowed CPU Usage level]: Required:50.00, Observed:95.00},]}}
	{name: DataBudgetPolicy, policyWeight: 1.000, response: {Decision: Must Not Proceed, Score: 0.00, Rationale: [{remainingBudget == 546133.3333333358 AND projectedUsage == 5242880 AND percentage == 0.1}]}}
 ], FinalDecision: Absolutely Must Not Proceed}

Why pushDisallowed??

Still have the same issue, does anyone have a solution?

Apple dev support mentioned that the criteria for delivery changed in iOS 15, but it changed again in 15.4 (beta). I installed the beta and push notifications have been working fine ever since.

same issue here. iOS 15.3 after restart, it only can be worked on a short time.

Another data point for this issue. I'm see this issue on a device with no obvious way to get it going again. Today, when I attempt a PUSH, my console shows the following:

com.apple.pushLaunch.xx.xxxxxx.***.xx:B449BC:[
	{name: ApplicationPolicy, policyWeight: 50.000, response: {Decision: Absolutely Must Not Proceed, Score: 0.00, Rationale: [{[pushDisallowed]: Required:0.00, Observed:1.00},]}}
	{name: ThunderingHerdPolicy, policyWeight: 1.000, response: {Decision: Must Not Proceed, Score: 0.00, Rationale: [{timeSinceThunderingHerdTriggerEvent < 300}]}}
 ], FinalDecision: Absolutely Must Not Proceed}

Very curious about: ThunderingHerdPolicy. I don't always see that, and sometimes only ApplicationPolicy. This test was done right after a reboot of the device. Upon re-running the test 10 minutes after the reboot, I no longer see ThunderingHerdPolicy rejection reason (just the ApplicationPolicy )

Things I have done (each to no effect):

  • Rebooted the device
  • Uninstalled and re-installed the app
  • run under the XCode debugger (this is suppose to bypass the throttling for development purposes)
  • waited a day, and tried again (hoping for a reset)

Observations:

  • This seems like new behaviour since 15.3.X upgrade
  • Pushing "alert" type notification works fine and they are either displayed (if app in background) or received by my handler (app in foreground).

*ONLY when "content-avaialable:1" is included does this happen

As frustrating as this is, if the "running under debugger" exception would allow it to work, then I could at least get work done.

Any update?

I got the same when i debug iCloud notification.

I can get a push notification from my iPad(15.3.1) to my iPhone(15.0.1). But can not got the iCloud notification from my iPhone to iPad.

The iPad received the notification in the Springboard, but later when it deliver to my application it shows pushDisallowed.

Please any solution?

The comments section below this post contains quite some helpful information from Apple about how background push notifications work. E.g.:

Once the device-wide battery or data budgets have been exhausted, no more background push notifications will be delivered until the budgets are reset. The budgets are reset every 24 hours, (...)

In my case I only need silent push notifications instead of background push notifications because in my use case the app is already running on the receiving device. However, the distinction between silent and background is only happening on the receiving device and not on sender's side (CloudKit in my case). While developing, I did not spend much attention on what is happening when the app is not running while such notifications arrive. In fact it began doing some heavy work as if it was started by the user.

So, when i was testing silent push notifications between two devices with my app running, all other devices on the same iCloud account were receiving the same notifications in the background and unintentionally exhausted their budgets. I guess that was at least partially the reason for the issues I had.

App does not launch by data FCM
 
 
Q