本文是 Android SDK 标准的集成指南文档。android
匹配的 SDK 版本为:r1.8.0及之后版本。api
本文随SDK压缩包分发。在你看到本文时,可能当前的版本与本文已经不是很适配。因此建议关注在线文档:android-studio
极光推送(JPush)是一个端到端的推送服务,使得服务器端消息可以及时地推送到终端用户手机上,让开发者积极地保持与用户的链接,从而提升用户活跃度、提升应用的留存率。极光推送客户端支持 Android, iOS 两个平台。浏览器
本 Android SDK 方便开发者基于 JPush 来快捷地为 Android App 增长推送功能。服务器
目前SDK只支持Android 2.1或以上版本的手机系统。富媒体信息流功能则需Android3.0或以上版本的系统。网络
若是您的项目有 libs/armeabi-v7a 这个目录,请把 libs/armeabi-v7a下的so文件 也复制一份到这个目录。app
根据 SDK 压缩包里的 AndroidManifest.xml 样例文件,来配置应用程序项目的 AndroidManifest.xml 。eclipse
主要步骤为:ide
AndroidManifest.xml权限配置: <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="Your Package" android:versionCode="100" android:versionName="1.0.0" > <uses-sdk android:minSdkVersion="11" android:targetSdkVersion="17" /> <!-- Required --> <permission android:name="Your Package.permission.JPUSH_MESSAGE" android:protectionLevel="signature" /> <!-- Required --> <uses-permission android:name="You Package.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" /> <!-- Optional. Required for location feature --> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <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" /> 应用包名及appkey替换: <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:name="Your Application"> <!-- Required --> <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> <!-- Required SDK 核心功能--> <!-- since 1.8.0 --> <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="Your Package"/> </intent-filter> </service> <!-- Required --> <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="Your Package"/> </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:exported="false" > <intent-filter> <action android:name="cn.jpush.android.ui.PushActivity" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="Your Package" /> </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" /> <!-- User defined. 用户自定义的广播接收器--> <receiver android:name="您本身定义的Receiver" android:enabled="true"> <intent-filter> <!--Required 用户注册SDK的intent--> <action android:name="cn.jpush.android.intent.REGISTRATION" /> <action android:name="cn.jpush.android.intent.UNREGISTRATION" /> <!--Required 用户接收SDK消息的intent--> <action android:name="cn.jpush.android.intent.MESSAGE_RECEIVED" /> <!--Required 用户接收SDK通知栏信息的intent--> <action android:name="cn.jpush.android.intent.NOTIFICATION_RECEIVED" /> <!--Required 用户打开自定义通知栏的intent--> <action android:name="cn.jpush.android.intent.NOTIFICATION_OPENED" /> <!--Optional 用户接受Rich Push Javascript 回调函数的intent--> <action android:name="cn.jpush.android.intent.ACTION_RICHPUSH_CALLBACK" /> <!-- 接收网络变化 链接/断开 since 1.6.3 --> <action android:name="cn.jpush.android.intent.CONNECTION" /> <category android:name="您应用的包名" /> </intent-filter> </receiver> <!-- Required. For publish channel feature --> <!-- JPUSH_CHANNEL 是为了方便开发者统计APK分发渠道。--> <!-- 例如: --> <!-- 发到 Google Play 的APK能够设置为 google-play; --> <!-- 发到其余市场的 APK 能够设置为 xxx-market。 --> <!-- 目前这个渠道统计功能的报表还未开放。--> <meta-data android:name="JPUSH_CHANNEL" android:value="developer-default"/> <!-- Required. AppKey copied from Portal --> <meta-data android:name="JPUSH_APPKEY" android:value="Your AppKey"/> </application> </manifest>
权限 | 用途 |
---|---|
You Package.permission.JPUSH_MESSAGE | 官方定义的权限,容许应用接收JPUSH内部代码发送的广播消息。 |
RECEIVE_USER_PRESENT | 容许应用能够接收点亮屏幕或解锁广播。 |
INTERNET | 容许应用能够访问网络。 |
WAKE_LOCK | 容许应用在手机屏幕关闭后后台进程仍然运行 |
READ_PHONE_STATE | 容许应用访问手机状态。 |
WRITE_EXTERNAL_STORAGE | 容许应用写入外部存储。 |
READ_EXTERNAL_STORAGE | 容许应用读取外部存储。 |
WRITE_SETTINGS | 容许应用读写系统设置项。 |
VIBRATE | 容许应用震动。 |
MOUNT_UNMOUNT_FILESYSTEMS | 容许应用挂载/卸载 外部文件系统。 |
ACCESS_NETWORK_STATE | 容许应用获取网络信息状态,如当前的网络链接是否有效。 |
SYSTEM_ALERT_WINDOW | 容许应用显示系统窗口,位于显示的顶层。 |
JPush SDK 提供的 API 接口,都主要集中在 cn.jpush.android.api.JPushInterface 类里。函数
init 初始化SDK
public static void init(Context context)
setDebugMode 设置调试模式
// You can enable debug mode in developing state. You should close debug mode when release. public static void setDebugMode(boolean debugEnalbed)
init 只须要在应用程序启动时调用一次该 API 便可。
如下代码定制一个本应用程序 Application 类。须要在 AndoridManifest.xml 里配置。请参考上面 AndroidManifest.xml 片段,或者 example 项目。
public class ExampleApplication extends Application { @Override public void onCreate() { super.onCreate(); JPushInterface.setDebugMode(true); JPushInterface.init(this); } }
如图所示,客户端启动分为 4 步:
JPush Demo 是极光推送随压缩包提供的用法示例Demo,本来适用于Eclipse工程。本教程将指导JPush用户用最简单的方法将极光推送Demo导入Android Studio。
参考3 分钟快速 Demo(Android),把JPush跑起来。以后你在Eclipse包浏览器中有可运行的项目。
在Eclipse的workspace中,该Demo工程的文件夹中,生成了Gradle相关配置文件.
在Android Studio中,一次只能打开一个Project,它至关于Eclipse中的一个workspace。而咱们从Eclipse中导出的一个Project,则至关于Android Studio中的一个Module。
如今就能够将极光推送Demo做为Android Studio的Module运行在真机或虚拟机上,并调试了