通话期间未调用远程通知回调

Posted

技术标签:

【中文标题】通话期间未调用远程通知回调【英文标题】:Remote Notification callback not being called during phone call 【发布时间】:2015-08-05 07:32:47 【问题描述】:

我创建了一个应用程序,其中在接收推送通知时编写后台获取代码。我在 .plist 中启用了后台模式,内容可用键在推送通知有效负载中设置为 1,注册推送通知并使用委托

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

现在,当我的应用处于后台时,我接到了一个电话。 在通话期间,我收到了我的应用程序的推送通知。在通话期间收到推送通知时,推送通知委托没有被调用。

【问题讨论】:

你注册推送通知了吗 @Bhavin 我已注册推送通知。 是的,委托没有被调用 你真的在电话中收到通知吗?你怎么知道的?有another question here,也有类似的问题。 @BarisAkar Banner 在推送通知到达时显示。 【参考方案1】:

所以在下面的电话过程中处理推送通知/远程通知的方法是: 当接到电话时,应用程序变为非活动状态,当电话断开时,应用程序变为活动状态,并调用 AppDelegate 中的方法“applicationDidBecomeActive”。因此,您可以在 applicationDidBecomeActive 中的 didReceiveRemoteNotification 方法中回调远程通知.

即使您可以在应用终止时处理推送通知。 例如在特定的 viewController 上移动,didFinishLaunchingWithOptions 包含字典,其中包含应用程序终止并收到推送通知时通知的有效负载。这可以作为 . `。

if (launchOptions != nil)

    // opened from a push notification when the app is closed

 NSDictionary* userInfo = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];

if (userInfo != nil)
   

    

else

    // opened app without a push notification.
`

希望这会奏效:)

【讨论】:

【参考方案2】:

我猜在通话过程中,蜂窝芯片被用于语音传输。数据传输是芯片要做的额外工作,这可能会极大地影响电池寿命。这是 Apple 做出的一个更明智的决定,使其在通话期间更像是一种无声通知。

【讨论】:

以上是关于通话期间未调用远程通知回调的主要内容,如果未能解决你的问题,请参考以下文章

应用未运行时如何处理远程通知

在 Swift 中注册远程通知时未收到设备令牌

如何在应用程序未运行并点击推送通知时调试远程推送通知?

仅在应用处于后台时调用的静默通知回调方法

当应用程序进入前台时检测远程通知

远程通知不会在后台启动应用程序