如何在Meteor应用程序中发送iOS推送通知?

10

我无法找到一份详尽的教程来教授如何从Meteor应用程序发送推送通知。我理解Meteor是基于node.js运行的,因此我一直在遵循这篇备受推荐的教程https://blog.engineyard.com/2013/developing-ios-push-notifications-nodejs,但是无济于事;在部署我的应用程序后,它可以上传,但网站不响应(鉴于部署时没有错误,我无法看出问题所在,尽管我认为问题可能与如何组织文件有关)。

我已经按照教程的说明正确地下载和加载了所有证书。我使用他们的示例应用程序正确获得了我的测试设备的ID。但是,考虑到Meteor的文件夹配置方式,我仍然无法弄清楚应该在哪里放置其他文件和依赖项。这种结构应该与教程中的结构有什么不同(换句话说,是否应将此结构放置在我的应用程序的.meteor文件夹内?)

我认为总体问题在于Meteor仅仅以与普通Node.js应用程序不同的方式组织其应用程序,因此我需要将这些证书和依赖项放置在特定的文件夹中,而不仅仅是与application.htmlapplication.jsapplication.css这些主要应用程序文件在同一目录下。


你可能需要将 apnagent 封装成一个新的 Meteor 包。请参考 https://github.com/oortcloud/unofficial-meteor-faq#what-about-npm-node-modules - Geoffrey Booth
@GeoffreyBooth 我完全同意,阅读了那份文档并跟着相关教程操作后,我遇到了一个“未捕获的类型错误:undefined不是一个函数”的问题,我认为这可能是在引用“var apn = Meteor.require('apnagent');”时出现的,尽管它已经被正确地下载为依赖项。这可能是原因吗? - zch
1
没有看到你的代码,我不知道怎么做,而且我从来没有尝试过设置APN;我只是指出如何在Meteor中一般使用NPM包。我建议你遵循@alanning的答案,因为他似乎已经成功了 :) - Geoffrey Booth
请确保双重检查您的捆绑标识符:https://github.com/raix/push - Squirrl
3个回答

14
我们在Meteor应用程序中使用apn npm包。尽管由于相同的教程我们也看了apnagent,但由于apn更受欢迎,所以我们选择了它。虽然apnagent在Meteor应用程序中也可以正常工作,但您可能希望尝试apn来进行故障排除。
我们这样在服务器端设置...
var apn = Meteor.require("apn"),
    path = Npm.require('path'),
    apnOptions = Meteor.settings.apnOptions || {},
    alertSound = apnOptions.sound || "alert.aiff",
    apnConnection

// default apn connection options
apnOptions = _.extend({
  cert: path.join(appRootPath, "private", "cert.pem"),
  key: path.join(appRootPath, "private", "key.pem"),
}, apnOptions)
apnConnection = new apn.Connection(apnOptions)

...并像这样使用它:

  sendAppleNotifications: function (alert, url, pushIds) {
    var note = new apn.Notification()

    // expires 1 hour from now
    note.expiry = Math.floor(Date.now() / 1000) + 3600
    note.sound = alertSound
    note.alert = alert
    note.payload = {'url': url}

    _.each(pushIds, function (token) {
      var device = new apn.Device(token)
      apnConnection.pushNotification(note, device)
    })

    return {success:'ok'}
  },  // end sendAppleNotifications
注意,Meteor.require是由npm meteor包启用的,您可以在这里了解更多信息。或者,您可以将使用apn包的代码放入您自己的Meteor包中,并像@GeoffreyBooth建议的那样使用Npm.require
==
2015年6月20日 - 更新
我最近回答了一个关于设备令牌的问题;希望以下资源对您有所帮助:

非常好的解释。感谢您提供如此深入的步骤说明。 - zch
在这个例子中,你如何获取(alert, url, pushIds)参数? - Squirrl

3
使用 Cordova 的 PushPlugin,您需要:
  • 自己集成 Meteor user 模型,以便选择要发送推送通知的用户。
  • 生成自己的证书,
  • 安全地存储相关的 .pem 和其他授权文件。

事实上,这是相当多的工作。

raix:push 解决了第一个问题,允许将推送通知发送给用户或用户组。但是:

  • 它已不再维护。
  • 它不再(根据我的经验)起作用。iOS 通知会出现,但它们不会震动手机或发出任何声音。有些人提出了一些解决方法,但对我来说都不起作用。
  • 它要求您对生产密码和 .pem 文件进行版本控制,这显然不是一个适合正式 12 因素应用程序的安全做法。

Pushwoosh 是一个服务,可以轻松地向您的应用程序发送推送通知,并包括对您的.pem文件和证书的自动设置和处理以及丰富的功能集。

lpender:meteor-pushwoosh 是我编写的一个包,它可以:

  • 允许您的应用程序创建和接收推送通知。
  • 在创建通知时,允许按用户进行查询。
  • 适用于 iOs 和 Android 设备。

请注意,从他们的价格页面上并不完全清楚,在免费试用之后,继续使用他们的 API 从您的应用程序生成消息将需要每月支付 49 美元。


你好,李!我是尼科。世界真小 :) - Squirrl

2
如果你只关心iOS的通知,alanning提到的apn包可能能胜任。然而,Meteor有一个名为raix:push的包,使用起来要简单得多,并支持APN iOS、GCM Android以及部分其他系统(APN Safari网页、GCM Chrome OS、Firefox OS)的通知。

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