接收自定义通知 iOS swift 2.0

Posted

技术标签:

【中文标题】接收自定义通知 iOS swift 2.0【英文标题】:Receive Custom Notification iOS swift 2.0 【发布时间】:2015-12-29 07:55:51 【问题描述】:

我尝试通过解析网站从我的网站接收自定义通知。

代码 didReceiveRemoteNotification :

func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject]) 
        PFPush.handlePush(userInfo)
        if application.applicationState == UIApplicationState.Inactive 
         PFAnalytics.trackAppOpenedWithRemoteNotificationPayload(userInfo)

这是我从解析网站收到的 JSON:

 [aps: 
     alert = "test adirax";
     sound = default; ]

它对我很有效,并且会显示通知。但是,当我尝试从我的网站推送数据时,通知无法显示/弹出。

这是我的 JSON 的样子:

"aps": "alerts" : "test", 
         "links": "",
         "sounds": "default"

我尝试打印(userInfo),结果是我得到了上面的所有数据,但是没有通知。

我想我缺少一些转换数据的代码?

信息

对于具体信息,我尝试通过订阅“频道”接收来自 parse.com 的通知。所以这不是本地通知或其他。

添加代码添加(根据我的 JSON 类型)

  if let launchOptions = launchOptions 
            let userInfo = launchOptions[UIApplicationLaunchOptionsRemoteNotificationKey] as? [NSObject: AnyObject]
            let aps = userInfo!["aps"] as? [NSObject: AnyObject]
            let alert1 = aps!["alerts"] as? String
            let link1 = aps!["links"] as? String
        

还有这个:

func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject]) 

        PFPush.handlePush(userInfo)
        if application.applicationState == UIApplicationState.Inactive 
            PFAnalytics.trackAppOpenedWithRemoteNotificationPayload(userInfo)
        
        let aps = userInfo["aps"] as? [NSObject: AnyObject]
        let alert1 = aps!["alerts"] as? String
        let link1 = aps!["links"] as? String
        print(userInfo)
        print("success")
    

当我一一调试时,我成功收集了所有数据,但是我仍然错过了显示的通知?

已解决第 1 部分 到目前为止,我设法获取数据并将通知推送出去,但这只是在我打开应用程序时。代码:

 func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject]) 
    PFPush.handlePush(userInfo)
    if application.applicationState == UIApplicationState.Inactive 
        PFAnalytics.trackAppOpenedWithRemoteNotificationPayload(userInfo)
    

    let notifiAlert = UIAlertView()

    let aps = userInfo["aps"] as? [NSObject: AnyObject]
        let alert1 = aps!["alerts"] as? String
        let link1 = aps!["links"] as? String

        notifiAlert.title = alert1!
        notifiAlert.message = link1
        notifiAlert.addButtonWithTitle("OK")
        notifiAlert.show()

        print(userInfo)
        print("success")


我使用了本地通知技巧,但是当我不使用应用程序时如何弹出通知?

【问题讨论】:

【参考方案1】:

您必须像这样添加自定义信息:

"aps": "alerts" : "test", 
         "sound": "default",
 "name": "Steven",
 "age": "32"

然后像这样解析它:

let aps = userInfo["aps"] as? [NSObject: AnyObject]
let msg = aps!["alert"] as? String
let name = userInfo["name"] as? String
print(name)

编辑: 您必须检查UIApplicationDelegate的两个功能的推送通知

首先。

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool 
        // check for push message
        if let launchOptions = launchOptions 
            let userInfo = launchOptions[UIApplicationLaunchOptionsRemoteNotificationKey] as? [NSObject: AnyObject]
            let aps = userInfo["aps"] as? [NSObject: AnyObject]
            let msg = aps!["alert"] as? String
            let name = userInfo["name"] as? String
            print(name)
        

第二个。

func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject]) 
    let aps = userInfo["aps"] as? [NSObject: AnyObject]
    let msg = aps!["alert"] as? String
    let name = userInfo["name"] as? String
    print(name)

【讨论】:

我应该在哪里添加自定义信息?如果我添加自定义信息,我的数据会被这些数据替换吗?例如:我的网络 JSON 是“Steven”,它将被“test”替换?? 我已经编辑了我的答案。您可以像这样添加您的自定义信息。 @史蒂文坦 好的,但我有一个问题,我没有“姓名”和“年龄”,我不能使用这些数据对吗? (根据我的 JSON)@Soohwan Park 您不必添加“姓名”和“年龄”。您可以根据需要添加自定义数据,也可以将其从 JSON 中删除,或者您可以简单地从 ios 中忽略它们。 @史蒂文坦 是的,我已经做到了,多亏了你,我现在可以检索 Json 数据了。但是我仍然错过了出现的通知。我已经更新了我的页面@Soohwan Park【参考方案2】:

您应该将自定义数据添加到有效负载的顶层,而不是 aps 对象。

例如这样:


    "aps": 
        "alerts" : "test", 
        "sounds": "default"
    ,
    "links": "",

【讨论】:

但我收到的 JSON 是动态的,取决于我通过我的网站发送的内容。如果我设置在我的播放负载的顶部,它会变成静态的吗? @Steventan 怎么会变成静态的?它是您的有效载荷的一部分。 更新了答案以说明有效负载的结构。 如果我把我的“链接”放在“aps”里面会错吗?还是它仍在工作但结构错误? 我原以为这不会引起任何问题,但是由于您显然遇到了一些结构不正确的问题,所以请坚持将您的额外信息放在正确的位置,在 aps 之外。 aps 应该保留给 iOS 内部使用的数据。

以上是关于接收自定义通知 iOS swift 2.0的主要内容,如果未能解决你的问题,请参考以下文章

当应用程序处于后台时,Flutter Cloud Messaging 自定义通知声音不起作用

我想在 Firebase onMessage 接收方法上播放自定义通知音,当锁定屏幕 android 手机时

您好,我正在开发聊天应用程序,需要 WhatsApp 等功能来自定义通知音。我正在使用 FCM 进行通知

Firebase 自定义声明 IOS 和 swift

ios 的 FCM 自定义通知

如何使用 FCM 在 ios 推送通知中播放自定义通知声音