当前位置: 首页 > 知识库问答 >
问题:

如何在iOS10应用程序中向推送通知添加媒体附件?

太叔富
2023-03-14

有多个例子,您应该如何设置您的项目添加丰富的通知,使用‘媒体附件’技术显示图像。我读过其中的大部分,但有些东西我错过了,因为我的项目没有显示任何带有该有效负载的丰富通知(用APNS-Tool和Boodle测试):

{
    "aps":{
        "alert":{
            "title": "Rich test",
            "body": "Dancing Banana"
        },
        "mutable-content": 1
    }
}

通知是可见的,但在3D Touch上,没有额外的信息显示(如图像或修改的标题)。通知扩展断点和nslog消息也不起作用。

下面是我的演示项目:https://github.com/gklka/richtest

我所做的:

  1. 创建了新项目
  2. 已实现IOS样式的授权:
    UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
    [center requestAuthorizationWithOptions:UNAuthorizationOptionAlert completionHandler:^(BOOL granted, NSError * _Nullable error) {

        if (granted) {
            NSLog(@"Granted");

            [[UIApplication sharedApplication] registerForRemoteNotifications];

        } else {
            NSLog(@"Error registering: %@", error);
        }

    }];
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
    NSLog(@"Token: %@", deviceToken);
}

- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error {
    NSLog(@"Error: %@", error);
}

已将banana.gif添加到项目

添加了将banana附件添加到NotificationService.m中的代码

    self.bestAttemptContent.title = [NSString stringWithFormat:@"%@ [modified]", self.bestAttemptContent.title];

    // Add image attachment
    NSURL *fileURL = [[NSBundle mainBundle] URLForResource:@"banana" withExtension:@"gif"];
    NSError *error;
    UNNotificationAttachment *attachment = [UNNotificationAttachment attachmentWithIdentifier:@"banana" URL:fileURL options:nil error:&error];
    self.bestAttemptContent.attachments = @[attachment];

我错过了什么?

附加信息:当我使用本地通知而不是远程通知时,同样的事情也起作用。

共有1个答案

古弘
2023-03-14

你大部分都在那里。发送附件的方式通常是作为有效负载中的URL。然而,如果您想像您的代码那样对附件进行硬编码,我认为它会起作用,但我认为您遗漏了一个关键组件。我认为服务扩展没有访问主捆绑包或其资源的权限。如果您向服务扩展添加了一个资源并尝试加载它(使用类似[NSBundle bundleforclass:[NotificationService class]])的话,我怀疑它会起作用。

但是,如果您将URL作为有效负载的一部分发送,那么您将从该URL加载映像,而不是从包加载映像。在这种情况下,我确信您还必须在NSURL上使用StartAccessingSecurityScopedResource(以及StopAccessingSecurityScopedResource)。

希望有帮助!

 类似资料:
  • 本文向大家介绍iOS10推送通知开发教程,包括了iOS10推送通知开发教程的使用技巧和注意事项,需要的朋友参考一下 虽然通知经常被过度使用,但是通知确实是一种获得用户关注和通知他们需要更新或行动的有效方式。iOS 10有了新的通知,如新消息、商业信息和时间表的变化。在本教程中,我将向你展示如何使用通知在你的iOS应用程序,并且显示iOS 10引入了新特性。开发iOS 10推送通知你需要最新版本的X

  • 我使用FCM(Firebase Cloud Messaging)在iOS中发送推送通知。 我能够在应用程序处于前台状态时收到通知。但当应用程序处于后台状态时,不会收到通知。每当应用程序进入前台状态时,才会收到通知。 我的代码是: 当App处于后台状态时: --根本不叫。 我在应用程序功能中启用了推送通知和后台模式下的远程通知。但应用程序仍然没有收到通知。 我提到了一些问题,但没能解决这个问题。iO

  • 问题内容: 我已经从本教程中开发了一个推送通知应用程序:android app中的推送通知 。当我运行应用程序时,将显示注册按钮。当我单击注册按钮,并且注册成功时,设备上会显示一条通知。 如何将其包含在自己的应用程序中?我的应用程序有一个xml解析示例应用程序。在这里,当添加任何新项目时,我希望在设备上显示(显示新订单)一条通知消息。它是在这里自动生成的。 问题答案: 我正在发布Google Cl

  • 我将rpush gem添加到我的gemfile并运行bundle install。根据文档,下一步是运行rpush init。这给了我以下错误。

  • 在我的申请中,我必须显示一个关于发生的特定动作的通知? 如何在操作时使用来自服务器的推送通知。.?(我将java(servlet/JSP)与tomcat一起使用)

  • 我想用Xamarin格式的C#创建一个基于文本的Android游戏。 在故事中,我想设置角色任务,这需要一些时间,例如“我去挖这个洞,完成后给你打电话。” 如何将通知设置为在设置的时间之后显示?例如,上述声明可能需要10分钟,然后用户收到继续游戏的通知? 我一周前才开始做C#,所以如果这是noobish,或者已经被问到了,我道歉。我到处都找过,但有几种类型的通知,当我试图理解它时,似乎我在读法语。