在iOS模拟器上测试FCM通知

9
自从 Xcode 11 开始,iOS 模拟器现在可以接收推送通知。这可以通过执行特定命令或向模拟器提供 JSON 文件来实现。我从这篇博客中得到了这个信息:Test Notification on Simulator
然而,在我的使用情况下,我使用 Firebase Cloud Messaging 向我的应用程序的用户(Android 和 iOS)发送通知。由于 FCM 的有效载荷不同,我无法在模拟器上测试 Firebase 生成的通知。
有办法实现这一点吗?我在这个主题上找到了一个类似的问题,但迄今为止还没有答案。
3个回答

8

要在模拟器中测试推送通知,只需创建一个新文件并粘贴以下JSON对象,将文件保存为.apns格式,然后将该文件拖放到模拟器中,推送就会生效。

{
    "aps" : {
        "alert" : {
            "title" : "sarunw.com",
            "body" : "A asdfsadfsadf"
        },
        "badge" : 5
    },
    "Simulator Target Bundle": "bundleId"
}

对于不同的有效负载,只需在Postman中使用以下JSON对象即可。
{
 "to" : "ewebWDSSwYc:APA91bGOARO4eq9LlOfgfXPQZMK3IiRFanhzSSgkD6cVqJiPbnyuEgsvQMarDEl6Hg7_UMtFM6Hn90jyTsSENNqLNNLVjLSypR0voAO3j6orIsgabX-t0cpfJ0qpB2SzhZiXvor0r__d",
 "notification":
 {
    "title":"ABC",
    "body":"123",
    "mutable_content" : true,
    "category":"CustomSamplePush"
 },
 
 "data":
    {
        "sender_contact_code" : "+92",
     "sender_contact" : "(555) 564-8583",
     "group_name":"Testing Group",
     "type":"NewMessage",
     "type_id":"1213",
     "notification_type_id":"123213"
    }
}

使用此URL -> https://fcm.googleapis.com/fcm/send(类型为POST),并在授权中将服务器密钥放入键值中,这样您就可以使用自己的格式化对象发送推送通知。
此外,您可以使用Pusher测试推送通知,并已上传参考的屏幕截图。 postman_screenshot

1
你的第一种方法可以在模拟器上生成通知,但我无法传递任何数据,而且AppDelegate.swift中没有调用任何通知方法。第二种方法可用于发送FCM通知,但它不能与模拟器一起使用。它只能在物理iOS设备上使用。 - Prerak Sola
1
是的,你说得对,但我认为你需要在{ "aps" : { "alert" : { "title" : "sarunw.com", "body" : "A asdfsadfsadf" }, "badge" : 5 }, "Simulator Target Bundle": "bundleId", data: {} }中放置自定义数据键,然后当你点击通知时,它将调用用户通知委托方法。 - chanadboy

0
也许你很久以前就找到了解决方案,但是这是我让它工作的方法: 为了允许在您的应用程序中捕获FCM通知,您需要将其添加到.apns文件中。
"gcm.message_id":"20021"

这是我用来在iPhone模拟器上测试FCM通知的apns文件:

{
    "Simulator Target Bundle": "XXX.XXXXXX.XXX",
    "aps": {
      "alert" : {
         "title" : "Test notif",
         "body" : "Should update widget && refresh feed"
      },
   },
   "gcm.message_id":"20021",
   "data": {}
}


这个究竟是如何工作的? - julio

0

自从 Xcode 12(而不是 11)以来,可以通过 APNS 负载注册推送和接收。如果拖放无法工作,您可以使用终端:

xcrun simctl push booted YOUR_BUNDLE payload.json

使用:

  • "booted" = 当前模拟器
  • "payload.json" = 存放在您的Mac上的APNS文件。

看起来可能是这样的:

{
    "Simulator Target Bundle": "xxx.xxx.xx ",
    "aps":{
                    "alert":{
                        "title":"XXX",
                        "body":"YYY YYYY"
                    },
                    "badge" : 5,
                    "data":{
                        // stuff
                    },
                    "mutable-content":1
                }
}
 

是的,这就是 OP 所说的命令。 但是你如何测试在模拟器中发送请求到 Firebase 是否正常到达? - julio

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接