(图文)手把手教你怎样集成极光推送
什么是推送
简单来说就是移动端推送服务即为服务器定期将消息发送给客户端的服务。
要实现这一目标有多种方案(仅以Android端为例):
1.定时查询
客户端每隔一定时间向服务器发出一次请求询问是否有新消息若存在则服务器将消息发送出来
优点是操作简便但缺点在于当间隔时间过长时无法像即时消息那样实时更新如果设置过短则会极大加重客户端负担耗电量也增加
2.短信通知
采用短信的方式向所有用户发送消息
优点是没有网络需求但成本较高一条短信费用约一毛钱对于百万级的应用程序每次发送就会产生10元费用当然会有一定的折扣优惠。如果只需要发送一两条信息倒是可以接受但如果每天发送五六条消息的话肯定会吓到老板!???????????
3.Google云消息服务(GCM)
这是谷歌推出的云消息服务以前名为C2DM现在已经由GCM取代了
优点是谷歌亲推原生且简单但也面临一个问题那就是在国内使用谷歌会不会有问题呢!
4.XMPP协议/MQTT协议
可以选择自行搭建一个推送服务系统
优点是功能强大但缺点在于实现起来较为复杂且需要较高的硬件部署成本
5.调用第三方推送服务
可以直接导入SDK并调用第三方提供的推送服务如极光推送百度云推送个推等等
优点是稳定操作简便而且开发成本较低但缺点在于使用的是别人家的产品总让人有些疑虑
基于以上分析, 我们决定采用第三方推送的方式. 本文具体说明了极光推送的实现原理. 第一步, 访问极光推送的官方网址https://www.jiguang.cn/push.

注册登陆,然后点击SDK下载

下载Android版本,解压,发现里面有这些东西

好了,这个先放一边,然后打开AS,在自己应用的AndroidManifest文件或者gradle文件里找到自己应用的包名

然后返回至网页,在极光推送的App管理界面访问https://www.jiguang.cn/app/list

请在这里为您的应用进行初始化设置。其实就是两个核心字段——应用名称和包名。当然还有图标元素可有可无,默认情况下会使用企业Logo。

创建好之后将这个Appkey保存下来

接着返回至已下载的SDK目录位置,并解压其中所包含的libs文件夹包内所有的资源文件内容至AS路径下

然后在AS里面将两个Jar包添加依赖
compile files('libs/jcore-android_v1.0.0.jar')
compile files('libs/jpush-android_v3.0.0.jar')
AI写代码
然后再将SDK目录下的res文件夹里的文件全部复制到AS里面来

这里最好一个文件一个文件地进行拷贝操作以避免出错(虽然我就是这样做的)。在资源都已复制完成后,请在module.gradle文件中添加几行代码(特别提醒:这些代码需放置于Android标签块内)。
sourceSets {
main {
jniLibs.srcDirs = ['libs']
}
}
AI写代码
好了,执行完这些后就开始做配置工作的最后一步,将一大堆权限,组件,复制到你应用的AndroidManifest文件里面,记得要将自己的应用包名改上去
AI写代码
这里是权限
<!-- Required -->
<permission
android:name="您应用的包名.permission.JPUSH_MESSAGE"
android:protectionLevel="signature" />
<!-- Required -->
<uses-permission android:name="您应用的包名.permission.JPUSH_MESSAGE" />
<uses-permission android:name="android.permission.RECEIVE_USER_PRESENT" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<!-- Optional. Required for location feature -->
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /> <!-- 用于开启 debug 版本的应用在6.0 系统上 层叠窗口权限 -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.GET_TASKS" />
AI写代码
组件必须都位于application标签内,并类似于普通的Activity
<!-- Required SDK 核心功能-->
<!-- 可配置android:process参数将PushService放在其他进程中 -->
<service
android:name="cn.jpush.android.service.PushService"
android:enabled="true"
android:exported="false" >
<intent-filter>
<action android:name="cn.jpush.android.intent.REGISTER" />
<action android:name="cn.jpush.android.intent.REPORT" />
<action android:name="cn.jpush.android.intent.PushService" />
<action android:name="cn.jpush.android.intent.PUSH_TIME" />
</intent-filter>
</service>
<!-- since 1.8.0 option 可选项。用于同一设备中不同应用的JPush服务相互拉起的功能。 -->
<!-- 若不启用该功能可删除该组件,将不拉起其他应用也不能被其他应用拉起 -->
<service
android:name="cn.jpush.android.service.DaemonService"
android:enabled="true"
android:exported="true">
<intent-filter >
<action android:name="cn.jpush.android.intent.DaemonService" />
<category android:name="您应用的包名"/>
</intent-filter>
</service>
<!-- Required SDK核心功能-->
<receiver
android:name="cn.jpush.android.service.PushReceiver"
android:enabled="true" >
<intent-filter android:priority="1000">
<action android:name="cn.jpush.android.intent.NOTIFICATION_RECEIVED_PROXY" />
<category android:name="您应用的包名"/>
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.USER_PRESENT" />
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
</intent-filter>
<!-- Optional -->
<intent-filter>
<action android:name="android.intent.action.PACKAGE_ADDED" />
<action android:name="android.intent.action.PACKAGE_REMOVED" />
<data android:scheme="package" />
</intent-filter>
</receiver>
<!-- Required SDK核心功能-->
<activity
android:name="cn.jpush.android.ui.PushActivity"
android:configChanges="orientation|keyboardHidden"
android:theme="@android:style/Theme.NoTitleBar"
android:exported="false" >
<intent-filter>
<action android:name="cn.jpush.android.ui.PushActivity" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="您应用的包名" />
</intent-filter>
</activity>
<!-- Required SDK核心功能-->
<service
android:name="cn.jpush.android.service.DownloadService"
android:enabled="true"
android:exported="false" >
</service>
<!-- Required SDK核心功能-->
<receiver android:name="cn.jpush.android.service.AlarmReceiver" />
AI写代码
此外,在此之后还有两行内容也需要将它们添加至 application 标签中。这些内容中的 Appkey字段就是我们在创建应用程序时所保存下来的 Appkey值。
<meta-data android:name="JPUSH_CHANNEL" android:value="developer-default"/>
<meta-data android:name="JPUSH_APPKEY" android:value="您应用的Appkey"/>
AI写代码
OK
到此为止, 整个集成系统已经实现了功能, 仅需最后调用接口完成集成.
在自己开发的应用项目中, 自定义Application类的onCreate()部分需要添加两行代码.
通常情况下, 建议在自定义Application中进行初始化设置;当然还可以通过主Activity进行初始化设置.
JPushInterface.setDebugMode (true); // 设置开启日志,发布时请关闭日志
JPushInterface.init (this); // 初始化 JPush
AI写代码

请确保最后查看AndroidManifest文件时不要忽略任何细节,并特别注意以下几点:一是您的应用包名是否已经完成替装;二是application标签下是否忘记添加name属性也是一个需要注意的地方。

好了,这样客户端就配置好了,接下来就在网页后台发个消息推送试试
访问此链接:https://www.jiguang.cn/push/app/这里是你的应用密钥及推送通知功能。

接下来就简单了,输入信息,选上Android,点击发送~~~~~ ~~~~~~~~~~~
咚咚 咚~~
然后你的应用就收到了一条推送通知
这样,极光推送的基本集成就完成了
