未调用iOS10 UNNotificationServiceExtension

Rod*_*o.C 19 apple-push-notifications ios ios10

我正在实施新的iOS10扩展以使用丰富的通知.我试图在推送通知上测试它但不工作,我只是收到一个简单的通知,而不是通过扩展.

我做了官方网站和其他一些地方指定的所有内容:

  • 我的应用程序启动并运行推送通知和正确的配置文件
  • 我在我的应用程序中添加了一个新目标,即通知服务扩展
  • 实现了我自己的代码(真的没关系,因为甚至没有进入新类)
  • 此外,我必须为此扩展设置配置文件,我只使用带有通配符的配置文件,我没有看到任何文档指定扩展目标是否必须启用推送通知功能,在这种情况下我需要为此扩展一个特定的配置一,目前我只使用通配符,无论如何它匹配(它必须匹配)我在应用目标中使用的配置文件,并且仅为应用目标启用了推送通知功能.
  • 我添加了UNNotificationExtensionCategory和NSExtensionPointIdentifier.我也将该类别作为推送有效载荷的一部分从服务器发送.

正如我所说,我收到通知但从未通过扩展.我看到操作系统如何尝试加载扩展但随后抛出一个没有相关描述的错误来识别问题:

Dec 31 21:00:00 iPhone SpringBoard(libextension.dylib)[51] <Notice>: calling plugIn beginUsing:   
Dec 31 21:00:57 iPhone pkd[86] <Notice>: assigning plug-in com.test.app.NotificationWithAttachmentExtension(1.0) to plugin sandbox   
Dec 31 21:03:57 iPhone pkd[86] <Notice>: enabling pid=51 for plug-in com.test.app.NotificationWithAttachmentExtension(1.0) 38BB5FF1-2597-42E0-B950-169DBFA80573 /private/var/containers/Bundle/Application/A8C47706-C0EC-4FB1-ABA7-0118372F6900/testapp.app/PlugIns/NotificationWithAttachmentExtension.appex   
Dec 31 21:00:53 iPhone SpringBoard(PlugInKit)[51] <Notice>: plugin com.test.app.NotificationWithAttachmentExtension interrupted   
Dec 31 21:03:56 iPhone SpringBoard(PlugInKit)[51] <Notice>: Hub connection error Error Domain=NSCocoaErrorDomain Code=4097 "connection to service named com.test.app.NotificationWithAttachmentExtension" UserInfo={NSDebugDescription=connection to service named com.test.app.NotificationWithAttachmentExtension}   
Jun 29 13:33:36 iPhone SpringBoard(libextension.dylib)[51] <Notice>: PlugInKit error in beginUsing:   
Jun 17 23:33:04 iPhone SpringBoard(libextension.dylib)[51] <Notice>: killing invalid plugIn   
Dec 31 21:00:00 iPhone SpringBoard(UserNotificationsServer)[51] <Error>: Extension error whilst trying to modify push notification F502-9B36: Error Domain=NSCocoaErrorDomain Code=4097 "connection to service named com.test.app.NotificationWithAttachmentExtension" UserInfo={NSDebugDescription=connection to service named com.test.app.NotificationWithAttachmentExtension}   
Dec 31 21:00:00 iPhone SpringBoard(UserNotificationsServer)[51] <Notice>: [com.test.app] Saving notification F502-9B36   
Dec 31 21:00:00 iPhone SpringBoard(libextension.dylib)[51] <Notice>: completed calling plugIn beginUsing: for pid: 0  
Run Code Online (Sandbox Code Playgroud)

相关扩展名.plist:

  <dict>
    <key>NSExtensionAttributes</key>
    <dict>
      <key>UNNotificationExtensionCategory</key>
      <string>attachmentCategory</string>
      <key>UNNotificationExtensionInitialContentSizeRatio</key>
      <real>1</real>
    </dict>
        <key>NSExtensionPointIdentifier</key>
        <string>com.apple.usernotifications.service</string>
        <key>NSExtensionPrincipalClass</key>
        <string>$(PRODUCT_MODULE_NAME).NotificationService</string>
  </dict>
Run Code Online (Sandbox Code Playgroud)

有什么不对或缺失?

提前致谢

bas*_*svk 45

还有什么可以解决的问题是检查扩展的部署目标.10.2当我正在测试的设备(仍然)使用10.1时,我的设置已经确定

在更改部署目标后10.0,UNNotificationServiceExtension实例被完美地调用

  • 伟大的。我犯了同样的错误。非常感谢。 (4认同)
  • 我的天啊!这是一个非常好的和简单的解决方案。我什至没有想到要检查这一点。 (2认同)
  • 谢谢你!非常感谢@basvk,我为其中一个目标集成了一个推送库,然后必须在同一周内重新集成第二个目标。两次我都浪费了很多时间没有检查目标并最终得到了你的答案 (2认同)
  • 非常感谢它对我帮助很大。当扩展部署目标为 10.3 时,我使用的是 10.1 设备 (2认同)
  • 面掌。我已经第三次讨论这个问题了。这个答案第二次帮助了我。下次我答应送蛋糕。 (2认同)

Woj*_*icz 14

如果你已经正确地完成了所有事情,不要忘记将它附加到过程中.

运行包含扩展程序的应用程序后:

  1. 在扩展中设置断点
  2. 选择Debug/Attach to Process by PID或name
  3. 输入扩展目标的名称
  4. 触发推送通知

  • NotificationService类没有出现在这里! (2认同)

小智 10

您必须在所有目标上将部署目标设置为相同。我想知道为什么 XCode 不自动完成此操作:/ .. Apple 喜欢浪费开发人员的时间 smh...


小智 9

如果您使用 Firebase,请尝试将有效负载更改为:

{
   “aps” : {
      “category” : “SECRET”,
      “mutable_content” : true,
      “alert” : {
         “title” : “Secret Message!”,
         “body”  : “(Encrypted)”
     },
   },
   “ENCRYPTED_DATA” : “Salted__·öîQÊ$UDì_¶Ù?è   ?^¬%gq?NÿÒQùw”
}
Run Code Online (Sandbox Code Playgroud)

mutable_content 字段映射到 APN 上的 mutable-content 字段。有关更多详细信息,请访问此链接

  • 使用常规非 Firebase API,该字段被命名为“mutable-content”并且必须与“alert”属性相邻 (3认同)

Rod*_*o.C 7

最后,我的工作正常,这是我从这个问题中记得的.

1)不要使用iOS10测试版的设备,因为我遇到的问题之一是因为我使用的是测试版.

2)只有应用程序需要APNS权利,这不是用于扩展的私有化所必需的.

3)我使用的是与扩展名(不是通配符)匹配的配置文件,无论如何我无法通过通配符确认它是否正常工作.

4)NSExtensionAttributes不是必需的,只需使用NSExtensionPointIdentifier和NSExtensionPrincipalClass作为扩展名.plist.除非您使用自己的布局

5)这甚至使用iOS 9令牌注册方法.

6)不要忘记推送通知中的有效负载中的可变内容值,这是服务器通过扩展所需的唯一强制值.

我认为这涵盖了我遇到的所有问题

  • 我们需要在UNNotificationServiceExtension的成员中心创建单独的bundle id和provisioning profile吗? (2认同)

Jon*_*nny 7

第二次来到这里。第一次,这个答案帮助了我,第二次,它没有。经过大量(内部)咒骂后,我发现我不知何故不小心从主应用程序目标中的嵌入式二进制文件中删除了扩展。当我重新添加扩展程序时,我的扩展程序将再次被调用。

所以检查这个:

  1. 单击左侧的应用程序项目。
  2. 单击您的主要应用目标。
  3. 选择通用。
  4. 在 Embedded Binaries 下,确保列出了您的扩展名,如果没有,请添加它。


小智 7

有同样的问题,为我解决的是从嵌入式二进制文件中删除扩展并再次添加它。

  • 这。难以置信,但这就是为我解决这个问题的方法。这两天我都用头撞墙。 (2认同)
  • 经过很长一段时间后,这对我来说是解决方案。我已经实施过很多次丰富的推送了。但这一次它对我的新项目不起作用。这个答案改变了一些东西,现在它正在发挥作用。谢谢。 (2认同)

Sha*_*med 7

Swift 5 简单方法

 this is very easy way just do it like this
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

  • 这对我有用,让我像个傻瓜:joy: (2认同)

Or *_*bel 5

看起来您的 plist 正在混合 2 个 plist。有2个扩展在玩:

  1. 通知内容扩展 - 负责通过视图控制器显示内容
  2. Notification Service Extension - 负责在显示通知之前在后台获取内容

这是Notification Content Extension目标的plist :

在此处输入图片说明

这是Notification Service Extension目标的plist :

r

  • 链接坏了。您是否在 aps 负载中发送 `mutable-content: 1`? (3认同)