我已经构建了一个与远程(免费)服务器通信的Android应用程序[知识交流论坛,灵感来自stackoverflow :)。截至目前,该应用程序根据用户需求获取/刷新内容。
我想实施推送通知,以便在有人发布他/她的问题答案时通知用户。我听说C2DM是Android设备的一个很好的推送通知服务。客户端代码我可能会照顾,这是服务器端编程让我完全困惑。我甚至不知道从哪里开始。
列出的服务器的功能是CGI,PHP,ASP.NET,SSI,FrontPage扩展,Perl和Python。我目前正在使用PHP脚本在MySQL数据库上运行SQL查询并将数据传输到客户端(android设备)。我必须使用哪些服务器功能来实现C2DM?在给定的能力下它是否可行?
推送通知将极大地增强我的应用程序的功能和可用性。我请求您提供有关设置服务器的指导。
提前感谢您的回复。
编辑:我注意到的一个区别是,当我使用WEB服务器时,http://code.google.com/android/c2dm/经常引用第三方应用服务器。想法?
答案 0 :(得分:2)
我通过Python Google App Engine使用c2dm推送消息。您将需要oauth将您的c2dm凭据验证为令牌,然后只需http实际启动c2dm消息到c2dm服务器......
这会将您的凭据转换为您可以使用的密钥:
def get_auth_key():
mk = __name__+".authkey"
form_fields = {
"accountType": "HOSTED",
"Email": constants.c2dm_email,
"Passwd": constants.c2dm_pwd,
"service":constants.c2dm_service, ## ( c2dm_service = "ac2dm" )
"source": constants.c2dm_source,
}
form_data = urllib.urlencode(form_fields)
result = urlfetch.fetch(url=constants.client_auth_url,
payload=form_data,
method=urlfetch.POST,
headers={'Content-Type': 'application/x-www-form-urlencoded'})
d = dict()
fields=result.content.split("\n")
for r in fields:
if "=" in r:
(k,v)=r.split("=")
d[k]=v
logging.debug(result)
logging.debug("Not in memcache :-(" )
auth = d["Auth"]
logging.debug("Now got key %s " % auth)
memcache.set(mk,auth)
return auth
然后只使用你从Android客户端注册获得的c2dm密钥,你就是好的...(请原谅app engine engine / memcache的东西)。
答案 1 :(得分:1)
我们已经在java中完全实现了C2DM推送通知功能。为了拥有完整的推动生态系统,我们遵循了
客户端的代码更改以获取注册密钥。
提供一项服务,Android客户端应用程序可以使用该服务向我们的内部服务器发送设备注册密钥。我们在tomcat上部署了一个简单的Web服务,它将注册密钥作为post参数。然后坚持在MySQL数据库中。
为了发送推送消息,我们创建了一个独立的Java应用程序,它从MySQL读取注册密钥,然后向Google c2dm服务器发出HTTP post请求。我们的应用程序是多线程的,因此它可以同时向Google服务器发出多个POST请求。
或者,您也可以查看城市航空货船等产品。
答案 2 :(得分:0)
与推送服务器建立低级套接字连接非常重要。使用PHP和mySQL很容易导致性能问题和重叠推送请求。应避免每隔x分钟执行Cron作业和启动shell脚本。
还有托管解决方案可以直接设置您,而无需为服务器端实现而烦恼,例如:www.urbainairship.com和XS2推送服务器,http://xs2technology.wordpress.com/2012/05/06/xs2-push-notification-platform_a-hosted-solution/