Android SDK 集成指南.docx
《Android SDK 集成指南.docx》由会员分享,可在线阅读,更多相关《Android SDK 集成指南.docx(13页珍藏版)》请在冰豆网上搜索。
AndroidSDK集成指南
AndroidSDK集成指南
使用提示
本文是JPushAndroidSDK标准的集成指南文档。
用以指导SDK的使用方法,默认读者已经熟悉IDE(Eclipse或者AndroidStudio)的基本使用方法,以及具有一定的Android编程知识基础。
本篇指南匹配的JPushAndroidSDK版本为:
v3.0.0及以后版本。
∙3分钟快速Demo(Android):
如果您想要快速地测试、感受下极光推送的效果,请参考本文在几分钟内跑通Demo。
∙极光推送文档网站上,有极光推送相关的所有指南、API、教程等全部的文档。
包括本文档的更新版本,都会及时地发布到该网站上。
∙如果您看到本文档,但还未下载AndroidSDK,请访问SDK下载页面下载。
产品功能说明
极光推送(JPush)是一个端到端的推送服务,使得服务器端消息能够及时地推送到终端用户手机上,让开发者积极地保持与用户的连接,从而提高用户活跃度、提高应用的留存率。
极光推送客户端支持Android,iOS两个平台。
本AndroidSDK方便开发者基于JPush来快捷地为AndroidApp增加推送功能。
主要功能
∙保持与服务器的长连接,以便消息能够即时推送到达客户端
∙接收通知与自定义消息,并向开发者App传递相关信息
主要特点
∙客户端维持连接占用资源少、耗电低
∙SDK丰富的接口,可定制通知栏提示样式
∙服务器大容量、稳定
jpush-android-release-3.x.y.zip集成压缩包内容
∙AndroidManifest.xml
o客户端嵌入SDK参考的配置文件
∙libs/jcore-android.v1.x.y.jar
o极光开发者服务的核心包。
∙libs/jpush-android_v3.x.y.jar
oJPushSDK开发包。
∙libs/(cpu-type)/libjcore1xy.so
o各种CPU类型的native开发包。
∙res
o集成SDK必须添加的资源文件
∙example
o是一个完整的Android项目,通过这个演示了JPushSDK的基本用法,可以用来做参考。
AndroidSDK版本
目前SDK只支持Android2.3或以上版本的手机系统。
富媒体信息流功能则需Android3.0或以上版本的系统。
jcenter自动集成步骤
说明 :
使用jcenter自动集成的开发者,不需要在项目中添加jar和so,jcenter会自动完成依赖;在AndroidManifest.xml中不需要添加任何JPushSDK相关的配置,jcenter会自动导入。
∙如果开发者需要修改组件属性,可以在本地的AndroidManifest中定义同名的组件并配置想要的属性,然后用xmlns:
tools来控制本地组件覆盖jcenter上的组件。
示例:
∙android="
∙package="com.android.tests.flavorlib.app"
∙xmlns:
tools="
∙
∙∙android:
icon="@drawable/icon"
∙android:
name="com.example.jpushdemo.ExampleApplication"
∙android:
label="@string/app_name">
∙
∙name="cn.jpush.android.service.PushService"
∙android:
process=":
multiprocess"
∙tools:
node="replace">
∙
∙……
∙
∙
∙……
∙
∙
∙……
∙
∙臧廷杰整理
∙确认androidstudio的Project根目录的主gradle中配置了jcenter支持。
(新建project默认配置就支持)
∙buildscript{
∙repositories{
∙jcenter()
∙}
∙......
∙}
∙
∙allprojects{
∙repositories{
∙jcenter()
∙}
∙}
∙在module的gradle中添加依赖和AndroidManifest的替换变量。
∙android{
∙......
∙defaultConfig{
∙applicationId"com.xxx.xxx"//JPush上注册的包名.
∙......
∙
∙ndk{
∙//选择要添加的对应cpu类型的.so库。
∙abiFilters'armeabi','armeabi-v7a','arm64-v8a'
∙//还可以添加'x86','x86_64','mips','mips64'
∙}
∙
∙manifestPlaceholders=[
∙JPUSH_PKGNAME:
applicationId,
∙JPUSH_APPKEY:
"你的appkey",//JPush上注册的包名对应的appkey.
∙JPUSH_CHANNEL:
"自定义渠道名称",//用户渠道统计的渠道名称
∙]
∙......
∙}
∙......
∙}
∙
∙dependencies{
∙......
∙
∙compile'cn.jiguang.sdk:
jpush:
3.0.5'//此处以JPush3.0.5版本为例。
∙compile'cn.jiguang.sdk:
jcore:
1.1.2'//此处以JCore1.1.2版本为例。
∙......
∙}
注 :
如果在添加以上abiFilter配置之后androidStudio出现以下提示:
NDKintegrationisdeprecatedinthecurrentplugin.Considertryingthenewexperimentalplugin.
则在Project根目录的gradle.properties文件中添加:
android.useDeprecatedNdk=true
说明:
若没有res/drawable-xxxx/jpush_notification_icon这个资源默认使用应用图标作为通知icon,在5.0以上系统将应用图标作为statusbaricon可能显示不正常,用户可定义没有阴影和渐变色的icon替换这个文件,文件名不要变。
手动集成步骤
∙解压缩jpush-android-release-3.x.y.zip集成压缩包。
∙复制libs/jcore-android_v1.x.y.jar到工程libs/目录下。
∙复制libs/jpush-android_v3.x.y.jar到工程libs/目录下。
∙复制libs/(cpu-type)/libjcore1xy.so到你的工程中存放对应cpu类型的目录下。
∙复制res/中drawable-hdpi,layout,values文件夹中的资源文件到你的工程中res/对应同名的目录下。
说明1:
若没有res/drawable-xxxx/jpush_notification_icon这个资源默认使用应用图标作为通知icon,在5.0以上系统将应用图标作为statusbaricon可能显示不正常,用户可定义没有阴影和渐变色的icon替换这个文件,文件名不要变。
说明2:
使用androidstudio的开发者,如果使用jniLibs文件夹导入so文件,则仅需将所有cpu类型的文件夹拷进去;如果将so文件添加在module的libs文件夹下,注意在module的gradle配置中添加一下配置:
android{
......
sourceSets{
main{
jniLibs.srcDirs=['libs']
......
}
......
}
......
}
配置AndroidManifest.xml
根据SDK压缩包里的AndroidManifest.xml样例文件,来配置应用程序项目的AndroidManifest.xml。
主要步骤为:
∙复制备注为"Required"的部分
∙将标注为“您应用的包名”的部分,替换为当前应用程序的包名
∙将标注为“您应用的Appkey”的部分,替换为在Portal上注册该应用的的Key,例如:
9fed5bcb7b9b87413678c407
小帖士
如果使用androidstudio,可在AndroidManifest中引用applicationId的值,在build.gradle配置中defaultConfig节点下配置,如:
defaultConfig{
applicationId"cn.jpush.example"//<--您应用的包名
……
}
在AndroidManifest中使用${applicationId}引用gradle中定义的包名
AndroidManifest示例
xmlversion="1.0"encoding="utf-8"?
>
android="
package="您应用的包名"
android:
versionCode="303"
android:
versionName="3.0.3"
>
minSdkVersion="9"android:
targetSdkVersion="23"/>
--Required-->
android:
name="您应用的包名.permission.JPUSH_MESSAGE"
android:
protectionLevel="signature"/>
--Required-->
name="您应用的包名.permission.JPUSH_MESSAGE"/>
name="android.permission.RECEIVE_USER_PRESENT"/>
name="android.permission.INTERNET"/>
name="android.permission.WAKE_LOCK"/>
name="android.permission.READ_PHONE_STATE"/>
name="android.permission.WRITE_EXTERNAL_STORAGE"/>
name="android.permission.READ_EXTERNAL_STORAGE"/>
name="android.permission.VIBRATE"/>
name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
name="android.permission.ACCESS_NETWORK_STATE"/>
name="android.permission.WRITE_SETTINGS"/>
name="android.permission.ACCESS_WIFI_STATE"/>
--Optional.Requiredforlocationfeature-->
name="android.permission.SYSTEM_ALERT_WINDOW"/>
--用于开启debug版本的应用在6.0系统上层叠窗口权限-->
name="android.permission.ACCESS_COARSE_LOCATION"/>
name="android.permission.CHANGE_WIFI_STATE"/>
name="android.permission.ACCESS_FINE_LOCATION"/>
name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"/>
name="android.permission.CHANGE_NETWORK_STATE"/>
name="android.permission.GET_TASKS"/>
android:
icon="@drawable/ic_launcher"
android:
label="@string/app_name"
android:
name="YourApplicationName">
--RequiredSDK核心功能-->
--可配置android:
process参数将PushService放在其他进程中-->
android:
name="cn.jpush.android.service.PushService"
android:
enabled="true"
android:
exported="false">
name="cn.jpush.android.intent.REGISTER"/>
name="cn.jpush.android.intent.REPORT"/>
name="cn.jpush.android.intent.PushService"/>
name="cn.jpush.android.intent.PUSH_TIME"/>
--since1.8.0option可选项。
用于同一设备中不同应用的JPush服务相互拉起的功能。
-->
--若不启用该功能可删除该组件,将不拉起其他应用也不能被其他应用拉起-->
android:
name="cn.jpush.android.service.DaemonService"
android:
enabled="true"
android:
exported="true">
name="cn.jpush.android.intent.DaemonService"/>
name="您应用的包名"/>
--RequiredSDK核心功能-->
android:
name="cn.jpush.android.service.PushReceiver"
android:
enabled="true">
priority="1000">
name="cn.jpush.android.intent.NOTIFICATION_RECEIVED_PROXY"/>
name="您应用的包名"/>
name="android.intent.action.USER_PRESENT"/>
name=".conn.CONNECTIVITY_CHANGE"/>
--Optional-->
name="android.intent.action.PACKAGE_ADDED"/>
name="android.intent.action.PACKAGE_REMOVED"/>
scheme="package"/>
--RequiredSDK核心功能-->
android:
name="cn.jpush.android.ui.PushActivity"
android:
configChanges="orientation|keyboardHidden"
android:
theme="@android:
style/Theme.NoTitleBar"
android:
exported="false">
name="cn.jpush.android.ui.PushActivity"/>
name="android.intent.category.DEFAULT"/>
name="您应用的包名"/>
--SDK核心功能-->
android:
name="cn.jpush.android.ui.PopWinActivity"
android:
configChanges="orientation|keyboardHidden"
android:
exported="false"
android:
theme="@style/MyDialogStyle">
name="android.intent.category.DEFAULT"/>
name="您应用的包名"/>
--RequiredSDK核心功能-->
android:
name="cn.jpush.android.service.DownloadService"
android:
enabled="true"
android:
exported="false">
--RequiredSDK核心功能-->
name="cn.jpush.android.service.AlarmReceiver"/>
--Userdefined.用户自定义的广播接收器-->
android:
name="您自己定义的Receiver"
android:
enabled="true">
--Required用户注册SDK的intent-->
name="cn.jpush.android.intent.REGISTRATION"/>
--Required用户接收SDK消息的intent-->
name="cn.jpush.android.intent.MESSAGE_RECEIVED"/>
--Required用户接收SDK通知栏信息的intent-->
name="cn.jpush.android.intent.NOTIFICATION_RECEIVED"/>
--Required用户打开自定义通知栏的intent-->
name="cn.jpush.android.intent.NOTIFICATION_OPENED"/>
--接收网络变化连接/断开since1.6.3-->
name="cn.jpush.android.intent.CONNECTION"/>
name="您应用的包名"/>
--Required.Forpublishchannelfeature-->
--JPUSH_CHANNEL是为了方便开发者统计APK分发渠道。
-->
--例如:
-->
--发到GooglePlay的APK可以设置为google-play;-->
--发到其他市场的APK可以设置为xxx-market。
-->
--渠道统计报表位于控制台页面的“统计”-“用户统计”-“渠道分布”中-->
name="JPUSH_CHANNEL"android:
value="developer-default"/>
--Required.AppKeycopiedfromPo