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

Replies

Among a long list of reasons why the system would deny launching your app in response to a push, these are the most common ones that would effect one device but not the other:

  • on this device Background App Refresh has been disabled either fully or for your app
  • the app has been killed by the user
  • the app has not been launched by the user for some time
  • you may have depleted the quota of background app launches

In general, content-available pushes are not guaranteed to launch an app every single time. You should not design your app assuming that's the case.

If you have a need to execute some code in response to receiving pushes, I suggest looking into using a notification service extension as discussed at https://developer.apple.com/documentation/usernotifications/unnotificationserviceextension. The Notification Service Extension will be executed for every visible push notification. So, it could serve your needs, as long as the user has not disabled the visibility of your notifications through various settings. The service extension will not be executed for push notifications that will not be presented visually.

We are also facing this problem. It worked very well for a while. But suddenly nothing arrives at the device and the pushes are always canceled with the note

{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}

I first suspected 15.2 beta 2, but that doesn't seem to be the problem. Is there any way to get more log output?

Or can someone from Apple say something about this?

Hi, i have the same issue, even when the app is running in foreground. According the documentation it should always call:

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {

It's working with iOS 15.1 but not with latest 15.2 Beta 3 (and probably also not with Beta 2).

The console logs say:

dasd	Submitted Activity: com.apple.pushLaunch.com.copany.appid:F51673 at priority 5 <private>
dasd	Adding a launch request (<private>) for application <private> by activity <private>
dasd	Launch requests for <private>: <private>
dasd	Daemon Canceling Activities: {(
    com.apple.pushLaunch.com.copany.appid:7BCCA4
)}
dasd	CANCELED: com.apple.pushLaunch.com.copany.appid:7BCCA4 at priority 5 <private>!
dasd	Removing a launch request for application <private> by activity <private>
SpringBoard	cancelActivities: 1 activities were not found: <private>
dasd	com.apple.pushLaunch.com.copany.appid:F51673:[
	{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}

I am aware that the system might cancel starting the app in background but with the app running in foreground it should always call the method in AppDelegate. Any hints are welcome...

I'm facing similar issue under these conditions:

  1. Running on iOS 15.2 (19C5044b)
  2. App is running in foreground and is actively receiving touch inputs
  3. Background App Refresh was disabled previously, and have been enabled in this OS version
  4. I tried restarting the device minutes ago
  5. The silent push was sent by CloudKit server due to a recent CloudKit data modification on another device
  6. I can receive the push on another device on iOS 14.8, which has its Background App Refresh disabled for all apps

The log I got on iOS 15.2:

dasd
Subsystem: com.apple.duetactivityscheduler 
Category: scoring

com.apple.pushLaunch.com.jonny.dictionary2:2E6024:[
	{name: ApplicationPolicy, policyWeight: 50.000, response: {Decision: Absolutely Must Not Proceed, Score: 0.00, Rationale: [{[pushDisallowed]: Required:1.00, Observed:0.00},]}}
	{name: ThunderingHerdPolicy, policyWeight: 1.000, response: {Decision: Must Not Proceed, Score: 0.00, Rationale: [{timeSinceThunderingHerdTriggerEvent < 300}]}}
 ], FinalDecision: Absolutely Must Not Proceed}
  • FB9771655

Add a Comment

Has anyone managed to get to the bottom of this?

Our FCM data messages are rejected in iOS 15 when the app is in a quit state (foreground state is fine). Working as expected on iOS <= 14.

[
	{name: ApplicationPolicy, policyWeight: 50.000, response: {Decision: Absolutely Must Not Proceed, Score: 0.00, Rationale: [{[pushDisallowed]: Required:1.00, Observed:0.00},]}}
	{name: ThunderingHerdPolicy, policyWeight: 1.000, response: {Decision: Must Not Proceed, Score: 0.00, Rationale: [{timeSinceThunderingHerdTriggerEvent < 300}]}}
 ], FinalDecision: Absolutely Must Not Proceed}

I'm seeing the same issue with CloudKit push notifications not being delivered even when the app is in the foreground and attached to the debugger. Makes debugging and testing CloudKit apps quite challenging....

Same ApplicationPolicy being triggered. Completely unclear what is the cause of the policy being triggered and no way to clear it out even after multiple device reboots and deleting and reinstalling debug builds of the app. This appears to be a change in iOS 15.2 as everything was working fine in 15.1 and earlier.

{[
	{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}

If anyone has advice on how to reset this policy "decision" on a development device and debug build of an app it would be greatly appreciated.

Same issue on iOS 15.2

I experienced the same problem on my iPhone XS running iOS 15.2. After updating to iOS 15.3 (Beta) the bug seems to be gone at least on my device. Not sure if that helps anyone, but maybe updating to the newest beta can solve the problem for you as well.

PN rejected based on pushDisallowed here too, iOS 15.2.

Got the same issue on iOS 15.2, iPhone XS.

Same issue with pure APNS (without FCM)

iOS 15.2, iPhone 13 Pro Max

After a few hours the delivery is not working anymore because of the same policy.

Even if the app is running in the foreground (with or without attached debugger), no background notifications are delivered.

A reboot of the device helps temporary for a few hours

I can reproduce this issue with my iPad and my iPhone both on iOS 15.3.

please any solution

iOS 15.3: same problem.

With iOS 15.4 Beta 1 it now works again, but I am not sure if this is just because the iPhone rebooted.