正在接收来自服务器的通知 parse.com

Receiving notification from a server thought parse.com

我正在开发一个使用推送通知的应用程序。此通知由与解析连接的服务器发送。该应用程序应按如下方式工作:

  1. 发布者在网站上创建新闻
  2. 当他按下按钮 "publish" 时,他向安装了该应用程序的设备发送推送通知
  3. 目标设备收到通知

我查看了 Apple 文档以找到推送通知的正确负载,并且开发服务器的人创建了一个 JSON 此规范。 他看到流程是正确的,所以当有人按下 "publish" 时,他看到服务器正确生成了通知,但通知没有到达设备。 当我复制有效负载并通过解析网站生成通知时,设备会毫无问题地接收通知。为什么当他通过我们的服务器生成通知时通知不起作用,为什么当我们通过解析网站生成通知时通知有效?

我查看了 parse 网站上的通知历史记录,如下所示:

第一个和第二个通知是使用我们的服务器(API 图标)发送的,第三个是使用解析网站发送的,当我将鼠标放在 "target" 列上时它显示我这个:

我在代码下方添加以将我的应用程序注册到远程通知:

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
    // Store the deviceToken in the current installation and save it to Parse.
    PFInstallation *currentInstallation = [PFInstallation currentInstallation];
    [[NSUserDefaults standardUserDefaults] synchronize];
    [currentInstallation setDeviceTokenFromData:deviceToken];
    [currentInstallation saveInBackground];
}

所以我想问你,为什么我从我们的服务器发送它们时收不到通知?为什么我从解析网站发送它们时可以收到通知? 怎么了?

谢谢

有效载荷

{
    "id": "",
    "date": "01/01/2015",
    "groups": [17321],
    "contacts": [16902,10402],
    "media": {
        "type": "image",
        "thumb": "http://lorempixel.com/400/200",
        "thumb_low": "",
        "thumb_ori": "",
        "target": "http://lorempixel.com/800/400",
        "targetOn": 1
    },
    "alert": "titolo",
    "sound": "default",
    "badge": "1",
    "text": "\n<p>testo <strong>testo bold</strong> <a href=\"http://www.google.it\" target=\"_blank\">link</a></p>",
    "buttons": [{
        "text": "Pulsante 2",
        "url": "http://www.apple.com"
    }, {
        "text": "Pulsante 1",
        "url": "http://www.google.it"
    }],
    "tags": ["tag1", "tag2"],
    "notificationType": "push",
    "breakingNews": 1,
    "suggested": 0
}

有几件事。您尚未在有效负载中设置设备类型。当调用 didRegisterForRemoteNotifications 时,您还没有将用户注册到频道。这些方法不是强制性的,但可能会解决您的问题。

...
[PFPush storeDeviceToken:newDeviceToken] 
[PFPush subscribeToChannelInBackground:@"global" target:self selector@selector(subscribeFinished:error:)];
}

然后将目标频道包含在您的负载中。