您的位置:首页 > 其它

(图文)手把手教你怎样集成极光推送

2016-12-16 16:41 239 查看
什么是推送

简单的说,移动端的推送服务就是服务器定时将消息送到给客户端的服务。

要达到这个效果有几种方式(Android端):

1.轮询

客户端每隔一段时间便向服务器发送一次请求,询问是否有新消息,如果有,则服务器将消息发送出来

优点:简单

缺点:轮询的单位时间如果长的话,则没有即时消息的效果,如果短的话,那客户端的压力就会很大,耗电,耗流量

2.SMS

以短信的方式向每个用户发送消息

优点:不需要网络

缺点:成本太高,一条短信一毛钱,一个百万级的APP,一次就是10w,当然,肯定是有折扣的。如果仅需要发送一两条这样的消息的话,还是能接受的,但是如果要每天来个五六条,老板:???????????

3.GCM服务

Google推出的云消息服务,Google Cloud Messaging,以前是C2DM,现在以及被GCM替代了

优点:Google亲儿子,原生,简单

缺点:国内用Google?

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')


然后再将S
4000
DK目录下的res文件夹里的文件全部复制到AS里面来



这里最好一个文件一个文件的复制,以免出现错误(反正我是这么弄的-。-)

在资源都复制好之后要在module的gradle文件下添加几句代码( 要在android大标签里哟)

sourceSets {
main {
jniLibs.srcDirs = ['libs']
}
}


好了,执行完这些后就开始做配置工作的最后一步,将一大堆权限,组件,复制到你应用的AndroidManifest文件里面,记得要将自己的应用包名改上去


这里是权限

<!-- 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" />


这里是组件

组件当然是都要写在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" />


然后最后还有两行,这也是要写在application标签里面的,这里面的应用的Appkey就是之前在网页创建应用时保存下来的Appkey

<meta-data android:name="JPUSH_CHANNEL" android:value="developer-default"/>
<meta-data android:name="JPUSH_APPKEY" android:value="您应用的Appkey"/>


OK

到这一步,整个集成已经完成了,就差最后一步调接口了

在自己应用的自定义Application类的onCreate()方法里面添加两行代码,

一般建议在自定义Application里初始化,当然也可以在主Activity里面进行初始化,

JPushInterface.setDebugMode (true);    // 设置开启日志,发布时请关闭日志
JPushInterface.init (this);            // 初始化 JPush




不要忘了在最后在AndroidManifest文件中检查一下有没有哪里有遗漏的,比如还有”您应用的包名”没替换啦,比如application标签下忘记写name属性啦



好了,这样客户端就配置好了,接下来就在网页后台发个消息推送试试

进入https://www.jiguang.cn/push/app/这里是你应用的Appkey/push/notification



接下来就简单了,输入信息,选上Android,点击发送~~~~~~~~~~~~

咚咚~~

然后你的应用就收到了一条推送通知

这样,极光推送的基本集成就完成了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: