概述
上一节,描述了注册极光推送并使用其例子的方法,这一节准备研究一下示例工程的框架,为移植它做准备。
分析例程源码
首先分析一下例程的源码结构,建议对照着JPUSH的官方文档(http://docs.jpush.io/)分析,我就是这样做的。
注册应用后,下载的示例工程结构如下,
ExampleApplication.java:该类为应用程序定制了一个Application类,因为调用JPush的SDK时,需要调用JPush提供的init()函数API,而按照官方文档的说明“init 只需要在应用程序启动时调用一次该API即可”,故而定制了一个Application类,如果你在MainActivity中调用init(),可能会造成init()的多次调用。当然,定义的该ExampleApplication类需要在 AndoridManifest.xml 里配置。
ExampleUtil.java:顾名思义,“Util”表示的就是一些全局的方法或者属性,在这个类里定义了一些静态函数,比如获取IME码、获取APPKEY等。
MainActivity.java:这个都知道,就是应用的主界面了。
MyReceiver.java:这个继承了BroadcastReceiver,是一个自定义接收器继承类。如果不定义这个类,用户点击推送通知后默认跳转到主界面,也接收不到自定义消息。这个类需要同样需要在AndoridManifest.xml 里配置,如下图。
PushSetActivity.java:这个类主要对JPush进行“高级选项”设置,比如设置Tag和Alias、定制通知栏样式。
SettingActivity.java:这个类也是对JPush进行设置,主要是设置接收push时间。
TestActivity.java:这个类继承Activity,主要是用来显示用户接收到的推送消息,当用户点击通知栏的推送消息后,会跳转到这个Activity。
下面再来分析一下AndoridManifest.xml,下图为内容完整截图
2行:指定Android的命名空间
3行:指定标准的应用包名,也是一个应用程序的默认名称。这里的包名可能会有人将其与src文件夹下的com.example.jpushdemo包比较从而混淆。其实专业开发android的比我知道,一个src可以包含多个自定义包,这个com.example.jpush包只是对包含了对JPush的一些调用操作,日后你如果对JPush比较熟悉了,完全可以将对JPush的操作进行抽离,封装在一个自定义的包里。
4行:设备应用程序版本识别码,必须是一个整数值,代表app更新过多少次,我们修改到自己的时候可以自定义。
5行:为用户查看版本用,需要具备一定的可读性。
7行:指定应用程序中需要使用的SDK版本,比如最低版本,最高版本和目标版本。
8-10行:自定义用户权限。注意其中的android:name="com.lygk.lovelife.permission.JPUSH_MESSAGE",如果你的操作JPush的包名是com.test.jpushdemo ,那么这里就是android:name="com.test.jpushdemo.JPUSH_MESSAGE",其实这样说也不是对的,只是一个命名而已,只要保证在其他引用这个权限的地方使用的名字和这个一致就可以了,比如13行就声明了这个自定义权限。
13-33行:应用程序所需要的权限的声明,这些可以从官方文档中查找到。
34-139行:应用程序的配置根元素,包含所有与应用有关配置的元素。
35行:应用图标
36行:应用名
37行:这个就是咱们自己定义的Applicatioin类的名字,也就是应用启动的是com.example.jpushdemo包下的ExampleApplication。
40-47行:Activity活动组件(即界面控制器组件)声明,对应MainActivity.java。注意Android应用中的每一个Activity都必须在AndoridManifest.xml配置文件中声明,否则系统不识别也不执行该Activity。
49行:Activity活动组件声明,对应PushSetActivity.java
51行:Activity活动组件声明,对应SettingActivity.java
53-58行:Activity活动组件声明,对应TestActivity.java
62-71行:Activity活动组件声明,对应JPush SDK包中定义的PushActivity.java,我充分怀疑这个就是手机接收到推送消息时显示在通知栏的那个Activity。
73-77行:Service服务组件的声明标签,用于定义与描述一个具体的Android服务。其中android:name表示Service服务类名,android:enabled表示服务开关,android:exported指示该服务是否能够被其他应用程序组件调用或跟它交互。
81-92行:JPush SDK包定义的PushService服务的声明。
95-113行:Boardcast Receiver广播接收器组件的声明,用于定义与描述一个具体的Android广播接收器。android:name表示Boardcast Receiver接收器类名,android:enabled表示接收器开关。注意其中的
115行:Boardcast Receiver广播接收器组件的声明,这里是AlarmReceiver。
119-132行:Boardcast Receiver广播接收器组件的声明,这里是MyReceiver自定义广播接收器,对应的是源码包的MyReceiver.java。
136行:
137行:
结尾
上面对在极光推送官网上创建应用时自动生成的示例代码的框架进行了分析,经过这么分析,我总体上知道该怎么去移植到自己的应用中了,下一节我准备修改移植到自己的Demo程序上。
/*****************************************************************************************************鲁阳高科工作室
*网 址:www.bigbearking.com
*商务合作QQ:1519190237
*业 务 范 围:网站建设、桌面软件开发、Android\IOS开发、图像影视后期处理、PCB设计
****************************************************************************************************/
PHP日志记录对于监视和调试Web应用程序以及捕获关键事件,错误和运行时行为至关重要。它为系统性能提供了宝贵的见解,有助于识别问题并支持更快的故障排除

Laravel使用其直观的闪存方法简化了处理临时会话数据。这非常适合在您的应用程序中显示简短的消息,警报或通知。 默认情况下,数据仅针对后续请求: $请求 -

PHP客户端URL(curl)扩展是开发人员的强大工具,可以与远程服务器和REST API无缝交互。通过利用Libcurl(备受尊敬的多协议文件传输库),PHP curl促进了有效的执行

Laravel 提供简洁的 HTTP 响应模拟语法,简化了 HTTP 交互测试。这种方法显着减少了代码冗余,同时使您的测试模拟更直观。 基本实现提供了多种响应类型快捷方式: use Illuminate\Support\Facades\Http; Http::fake([ 'google.com' => 'Hello World', 'github.com' => ['foo' => 'bar'], 'forge.laravel.com' =>

您是否想为客户最紧迫的问题提供实时的即时解决方案? 实时聊天使您可以与客户进行实时对话,并立即解决他们的问题。它允许您为您的自定义提供更快的服务

文章讨论了PHP 5.3中引入的PHP中的晚期静态结合(LSB),从而允许静态方法的运行时分辨率调用以获得更灵活的继承。 LSB的实用应用和潜在的触摸


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

PhpStorm Mac 版本
最新(2018.2.1 )专业的PHP集成开发工具

Atom编辑器mac版下载
最流行的的开源编辑器

mPDF
mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

Dreamweaver Mac版
视觉化网页开发工具