Thursday, November 8, 2012

Urban Airship Server API - Java客户端实例

今天在看Urban Airship的server端的API,Urban Airship官方网站上推荐了一个第三方的开源库http://bitbucket.org/sullis/urbanairship-java/,但是在经过简单测试后还是发现了一些问题,并且这个库好像也不是很活跃。为了看看Urban Airship的server端API怎么用,自己还是决定自己写个小程序试试看。


今天的测试由于涉及从Urban Airship向Android设备发送消息,所以这里假定已经有Android设备或者模拟器安装了可以接收消息的native app,具体步骤可以参考我的前一篇博客(http://blog.csdn.net/kongxx/article/details/8155916)。

下面开始今天的测试

1. 首先创建一个工程,这里还是使用maven来创建工程
mvn archetype:generate -DgroupId=urbanairship.server -DartifactId=urbanairship-server -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
2. 修改pom.xml文件如下
3. 创建一个测试类Test,注意替换其中的username, password和apid。
4. 测试,首先运行模拟器,然后运行可以接收message的android native app,最后运行上面的测试类,稍等片刻就会在设备或者模拟器上看到消息了。


Android Server Push Notification - Urban Airship


1. 首先在urbanairship注册一个帐户,他有免费帐户可用,试用45天。

2. 注册完之后,创建一个app,内容比较简单看着填就可以了。

3. 在app生成之后,进入属性修改页,将其中Android Package改成自己将要使用的工程包名。如果需要GCM支持,需要给urbanairship发邮件,一般很快就会批下来,我是第二天就批下来了。

4. 在urbanairship的下载页下载最新的开发包,这里我下载的是2.0.1版本。解压后用eclipse建立工程,选择PushSample目录导入工程。

5. 将其中的所有包名改成上面自己定义的包名(搜索一些,地方比较多)。

6. 需要注意的工程下有两个文件AndroidManifest.xml和AndroidManifest-Helium.xml,我们先使用Helium来测试,将原来的AndroidManifest.xml文件改名成AndroidManifest-GCM.xml,将AndroidManifest-Helium.xml改名成AndroidManifest.xml。

7. 修改assets/airshipconfig.properties文件,修改其中的
developmentAppKey 在app属性页可以看到
developmentAppSecret 在app属性页可以看到
transport = helium

8. 运行AVD和测试程序,这里我使用的是Android4.1.2 Google APIs的模拟器。注意在日志中查找APID,将其值记住,后面会用。然后选中应用程序的"Preferences"的"Push Enabled"复选框。

9. 在unbanairship中选择上面建立的app,并在左侧导航里选择"Push"->"APIDs"可以查看已经注册的设备。

10. 在"Push"->"Test Push Notification"->"Android",在表单的Apid里输出上面记住的APID,在alert里输入message,然后按发送按钮,此时就会在模拟器上看到结果了。

11. GCM支持
11.1 如果需要使用GCM支持(参考http://developer.android.com/guide/google/gcm/index.html),需要首先在http://code.google.com/apis/console建立一个project,并且将其中的Project ID填入unbanairship的app属性中。
11.2 改名AndroidManifest-GCM.xml成AndroidManifest.xml,修改assets/airshipconfig.properties文件,修改后内容如下,这里需要注意的是
developmentAppKey 在app属性页可以看到
developmentAppSecret 在app属性页可以看到
transport = gcm
gcmSender = <Project Id>  (在google apis console那里获取)
11.3 再次运行android程序,然后在unbanairship测试。

Saturday, November 3, 2012

GCM Demo "Unfortunately, GCM demo has stopped"


今天在学习Google Cloud Messaging (GCM),在运行文档上使用的例子(http://developer.android.com/guide/google/gcm/demo.html)的时候,按照步骤设置好server和client之后,运行server和client之后,在模拟器上运行GCM Demo的时候总是出现"Unfortunately, GCM demo has stopped"错误,检查了一下,需要修改的地方都按照文档上的说明改了,还是出错。最后发现原来是选择的AVD有问题,开始使用的是"Android 4.1.2 - API Level 16",后来我把AVD换成"Google APIs (Google Inc.) - API Level 16"再运行client,就不会再出现上面的问题了。

另外在测试的时候还发现一个问题,就是文档上给出了两种server选择,一种是“Using a standard web server”,在使用这种server选择的时候,按照文档上的说明配置client是可以运行的。但是如果使用“Using App Engine for Java”,需要将client中CommonUtilities.SERVER_URL改成“http://192.168.1.10:8080”,就是去掉其中的“/gcm-demo”,然后再运行,此时就可以通过“http://192.168.1.10:8080”来发送message了。