Android 平台中的推送通知
我正在寻找编写一个从服务器接收推送警报的应用程序。我找到了几种方法来做到这一点。
- SMS - 拦截传入的 SMS 并从服务器发起拉取
- 定期轮询服务器
每个都有其自身的限制。短信-不保证到达时间。轮询可能会耗尽电池电量。
请问您有更好的建议吗?非常感谢。
I am looking to write an app that receives pushed alerts from a server. I found a couple of methods to do this.
- SMS - Intercept the incoming SMS and initiate a pull from the server
- Poll the server periodically
Each has its own limitations. SMS- no guarantee on arrival time. Poll may drain the battery.
Do you have a better suggestion please? Thanks very much.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(20)
我对 Android 推送通知的理解/经验是:
C2DMGCM - 如果您的目标 Android 平台是 2.2+,那么就选择它。需要注意的是,设备用户必须始终使用 Google 帐户登录才能获取消息。MQTT - 基于发布/订阅的方法,需要设备的主动连接,如果不合理实施,可能会耗尽电池。
Deacon - 由于社区有限,从长远来看可能不太好支持。
编辑:2013 年 11 月 25 日添加
GCM -谷歌说...
My understanding/experience with Android push notification are:
C2DMGCM - If your target android platform is 2.2+, then go for it. Just one catch, device users have to be always logged with a Google Account to get the messages.MQTT - Pub/Sub based approach, needs an active connection from device, may drain battery if not implemented sensibly.
Deacon - May not be good in a long run due to limited community support.
Edit: Added on November 25, 2013
GCM - Google says...
Android 云到设备消息传递框架
重要提示:自 2012 年 6 月 26 日起,C2DM 已被正式弃用。 这意味着 C2DM 已停止接受新用户和配额请求。 C2DM 不会添加新功能。但是,使用 C2DM 的应用程序将继续运行。我们鼓励现有 C2DM 开发人员迁移到新版本的 C2DM,即 Google Cloud Messaging for Android (GCM)。有关更多信息,请参阅 C2DM 到 GCM 迁移文档。开发者必须使用GCM进行新的开发。
请检查以下链接:
http://developer.android.com/guide/google /gcm/index.html
Android Cloud to Device Messaging Framework
Important: C2DM has been officially deprecated as of June 26, 2012. This means that C2DM has stopped accepting new users and quota requests. No new features will be added to C2DM. However, apps using C2DM will continue to work. Existing C2DM developers are encouraged to migrate to the new version of C2DM, called Google Cloud Messaging for Android (GCM). See the C2DM-to-GCM Migration document for more information. Developers must use GCM for new development.
Kindly check the following link:
http://developer.android.com/guide/google/gcm/index.html
这里我写了一些关于如何从头开始获取 RegID 和通知的步骤
您可以在下面的 URL 链接中找到完整的教程
获取的代码片段注册 ID(推送通知的设备令牌)。
为 GCM 配置项目
更新 AndroidManifest 文件
为了在我们的项目中启用 GCM,我们需要在清单文件中添加一些权限
转到 AndroidManifest.xml 并添加以下代码
添加权限
添加 GCM 广播接收器声明
在应用程序标签中添加 GCM 广播接收器声明
添加 GCM 服务声明
获取注册 ID(用于推送通知的设备令牌)
现在转到您的启动/启动活动
添加常量和类变量
更新OnCreate和OnResume方法
注意:请存储REGISTRATION_KEY,这对于向GCM发送PN消息很重要
还要记住,这对于所有设备来说都是唯一的,通过使用它,只有 GCM 才会发送推送通知。
接收推送通知
添加 GCM 广播接收器类
由于我们已经在清单文件中声明了“GcmBroadcastReceiver.java”,所以让我们创建这个类
以这种方式更新接收器类代码
添加GCM服务类
由于我们已经在清单文件中声明了“GcmBroadcastReceiver.java”,所以让我们创建这个类
以这种方式更新接收器类代码
Here I have written few steps for How to Get RegID and Notification starting from scratch
You can find complete tutorial in below URL link
Code snip to get Registration ID (Device Token for Push Notification).
Configure project for GCM
Update AndroidManifest file
For enable GCM in our project we need to add few permission in our manifest file
Go to AndroidManifest.xml and add below code
Add Permission
Add GCM Broadcast Receiver declaration
add GCM Broadcast Receiver declaration in your application tag
Add GCM Servie declaration
Get Registration ID (Device Token for Push Notification)
Now Go to your Launch/Splash Activity
Add Constants and Class Variables
Update OnCreate and OnResume methods
Note : please store REGISTRATION_KEY, it is important for sending PN Message to GCM
also keep in mine this will be unique for all device, by using this only GCM will send Push Notification.
Receive Push Notifications
Add GCM Broadcast Receiver Class
As we have already declared “GcmBroadcastReceiver.java” in our Manifest file, So lets create this class
update receiver class code this way
Add GCM Service Class
As we have already declared “GcmBroadcastReceiver.java” in our Manifest file, So lets create this class
update receiver class code this way
有一项新的开源项目正在开发一个 Java 库,用于基于 Meteor Web 服务器在 Android 上推送通知。您可以在 Deacon 项目博客 中查看,您可以在其中找到 Meteor 和项目 GitHub 存储库的链接。我们需要开发人员,所以请传播出去!
There is a new open-source effort to develop a Java library for push notifications on Android based on the Meteor web server. You can check it out at the Deacon Project Blog, where you'll find links to Meteor and the project's GitHub repository. We need developers, so please spread the word!
您可以使用 Xtify (http://developer.xtify.com) - 他们有一个可以使用的推送通知网络服务与他们的 SDK。它是免费的,到目前为止,它对我来说非常有效。
You can use Xtify (http://developer.xtify.com) - they have a push notifications webservice that works with their SDK. it's free and so far, it's worked really well for me.
或者....
or....
我建议使用 GCM - Android 版 Google 云消息传递
它是免费的,对于简单的用途来说,它应该非常容易。
但是,它需要维护一个第三端服务器来代表您发送通知。
如果你想避免,有一些非常好的Android推送通知服务的工业解决方案:
免责声明 - 我在 PushApps 工作,并且在我的应用程序中使用他们的产品已有一年多了。
I recommend using GCM - Google Cloud Messaging for Android
It's free, and for simple uses it's should be very easy.
However it requires to maintain a 3rd side server to send the notifications on your behalf.
If you want to avoid that there are some very good industrial solutions for Android push notifications service:
Diclaimer - I work in PushApps and also use their product in my applications for over a year now.
截至 2016 年 5 月 18 日,Firebase 是 Google 为移动开发者提供的统一平台,包括推送通知。
As of 18/05/2016 Firebase is Google's unified platform for mobile developers including push notifications.
恐怕您已经找到了这两种可能的方法。 Google 至少在最初打算实现一个 GChat API,您可以使用它来实现推/拉。遗憾的是,该库被 Android 1.0 删除了。
I'm afraid you've found both possible methods. Google was, at least initially, going to implement a GChat api you could use for a push/pull implementation. Sadly, that library was cut by Android 1.0.
我不知道这是否还有用。我通过 http://www.pushlets.com/ 的 java 库实现了类似的目标,尽管
在服务不会阻止 android 关闭它并杀死侦听器线程。
I dont know if this is still useful. I achieved something like this with a java library at http://www.pushlets.com/
Althoug doing it in a service won't prevent android from shutting it down an killing the listener thread.
Google C2DM 现在已弃用,为此,您必须使用新服务 GCM(Google Cloud Messaging)。有关文档,请参阅 http://developer.android.com/guide/google/gcm /gs.html
Google C2DM is depreciated now, for that, you have o use the new service GCM (Google Cloud Messaging). For documantation, see http://developer.android.com/guide/google/gcm/gs.html
C2DM:您的应用程序用户必须拥有 Gmail 帐户。
MQTT:当您的连接达到1024时,它将停止工作,因为它使用了linux的“选择模型”。
Android 有一个免费的推送服务和 api,你可以尝试一下:http://push-notification.org
C2DM: your app-users must have the gmail account.
MQTT: when your connection reached to 1024, it will stop work because of it used "select model " of linux.
There is a free push service and api for android, you can try it: http://push-notification.org
免费且简单的方法:
如果您的目标用户群不大(小于1000)并且您想要开始免费服务,那么Airbop是最好、最方便的。
Airbop 网站
它通过其 API 使用 Google Cloud Messaging 服务,并提供良好的性能。我已经将它用于我的两个项目,并且很容易实现。
像 Urbanship 这样的服务非常出色,但提供了整个部署堆栈,而不仅仅是推送通知。
如果您的目标只是推送服务,Airbop 就可以正常工作。
我没有使用过 Pushwoosh,但也是一个不错的选择。它允许免费推送到 1,000,000 台设备
Free and easy method:
If your target user base is not large(less than a 1000) and you want a free service to start with, then Airbop is the best and most convenient.
Airbop Website
It uses Google Cloud Messaging service through its API and is provides a good performance. i have used it for two of my projects and it was easy implementing it.
Services like and Urbanship are excellent but provide an entire deployment stack and not just the push notifications thing.
If only push service is your target, Airbop will work fine.
I haven't used Pushwoosh, but is also a great choice. It allows push to 1,000,000 devices for free
我建议同时使用 SMS 和 HTTP。如果用户未登录,请向其手机发送短信以通知他们有一条消息正在等待。
这就是爱立信实验室服务的工作原理:https://labs.ericsson.com/apis /mobile-java-push/
如果您自己实现这一点,棘手的部分是在用户看不到它的情况下删除传入的短信。或者,如果他们在你的案例中看到这一点也没关系。
看起来这样有效:
使用 BroadCastReceiver - Android 删除短信
是的,编写这样的代码可能很危险,您可以可能会毁掉某人的生活,因为您的应用程序删除了不应删除的短信。
I would suggest using both SMS and HTTP. If the user is not signed in send their phone an SMS to notify them there's a message waiting.
That's how this Ericsson Labs service works: https://labs.ericsson.com/apis/mobile-java-push/
If you implement this yourself the tricky part is deleting the incoming SMS without the user seeing it. Or maybe it's ok if they see it in your case.
Looks like this works:
Deleting SMS Using BroadCastReceiver - Android
Yes, writing code like this can be dangerous and you can potentially ruin someone's life because your application deleted an SMS it shouldn't have.
您可以使用 Google Cloud Messaging 或 GCM,它免费且易于使用。您还可以使用第三方推送服务器,例如 PushWoosh,这为您提供了更大的灵活性
You can use Google Cloud Messaging or GCM, it's free and easy to use. Also you can use third party push servers like PushWoosh which gives you more flexibility
有很多第三方服务器,例如 Urban Airship、Xtify、Mainline, ... 不仅可以在 Android 上发送,还可以在 iOs、Windows Phone 上发送 ...
There's a lot a third party servers like Urban Airship, Xtify, Mainline, ... whiches allow send not only on Android, but also on iOs, Windows Phone ...
Firebase Cloud Messaging (FCM) 是新版本GCM。 FCM 是一种跨平台消息传递解决方案,可让您安全且免费地发送消息。继承 GCM 的中央基础设施,在 Android、iOS、Web (javascript)、Unity 和 C++ 上可靠地传递消息。
截至 2018 年 4 月 10 日,Google 已拒绝 GCM。 GCM 服务器和客户端 API 已弃用,并将于 2019 年 4 月 11 日删除。Google 建议将 GCM 应用程序迁移到 Firebase Cloud Messaging (FCM),它继承了可靠且可扩展的 GCM 基础设施。
资源
Firebase Cloud Messaging (FCM) is the new version of GCM. FCM is a cross-platform messaging solution that allows you to send messages securely and for free. Inherits GCM's central infrastructure to deliver messages reliably on Android, iOS, Web (javascript), Unity and C ++.
As of April 10, 2018, Google has disapproved of GCM. The GCM server and client APIs are deprecated and will be removed on April 11, 2019. Google recommends migrating GCM applications to Firebase Cloud Messaging (FCM), which inherits the reliable and scalable GCM infrastructure.
Resource
您可以使用 Pusher
它是一项托管服务,可以非常轻松地将实时数据和功能添加到网络和移动应用程序。
Pusher 提供了可集成到所有主要运行时和框架中的库。
服务器上的
PHP、Ruby、Python、Java、.NET、Go 和 Node
客户端上的
JavaScript、Objective-C (iOS) 和 Java (Android)
。You can use Pusher
It's a hosted service that makes it super-easy to add real-time data and functionality to web and mobile applications.
Pusher offers libraries to integrate into all the main runtimes and frameworks.
PHP, Ruby, Python, Java, .NET, Go and Node
on the serverJavaScript, Objective-C (iOS) and Java (Android)
on the client.Google 的官方答案是
Android 云到设备消息传递框架(已弃用)Google 云消息(已弃用)Firebase Cloud Messaging它适用于 Android >= 2.2(在具有 Play 商店的手机上) 。
Google's official answer is the
Android Cloud to Device Messaging Framework (deprecated)Google Cloud Messaging(deprecated)Firebase Cloud MessagingIt will work on Android >= 2.2 (on phones that have the Play Store).
(从我对类似问题给出的答案中交叉发布 - Android 是否支持近乎实时的推送通知? )
我最近开始使用 MQTT http:// mqtt.org for Android 作为做这类事情的一种方式(即不是短信而是数据驱动的推送通知,几乎立即消息传递,而不是轮询等)
我有一篇博客文章,其中包含背景信息如果有帮助
http://dalelane.co.uk/blog/?p=938
(注:MQTT 是一项 IBM 技术,我应该指出我为 IBM 工作。)
(cross-posting from an answer I gave to a similar question - Does Android support near real time push notification? )
I recently started playing with MQTT http://mqtt.org for Android as a way of doing this sort of thing (i.e. push notification that is not SMS but data driven, almost immediate message delivery, not polling, etc.)
I have a blog post with background information on this in case it's helpful
http://dalelane.co.uk/blog/?p=938
(Note: MQTT is an IBM technology, and I should point out that I work for IBM.)