Android 极光推送
效果图
极光推送步骤:
1.首先需要打开极光推送官网:点击打开链接 注册账号并登陆
2.在主页选择SDK下载(如果嫌麻烦可以参考下文中的jcenter 自动集成步骤)
3.在主类MainActivity中onCreate方法中添加
//如果是正式上线的APP则改为True
JPushInterface.setDebugMode(true);
//初始化极光推送
JPushInterface.init(this);

Android SDK 概述

  • Android 常见问题
  • Android 客户端 SDK 下载

JPush Android

开发者集成 JPush Android SDK 到其应用里,JPush Android SDK 创建到 JPush Cloud 的长连接,为 App 提供永远在线的能力。
当开发者想要及时地推送消息到达 App 时,只需要调用 JPush API 推送,或者使用其他方便的智能推送工具,即可轻松与用户交流。

图中红色部分,是 JPush 与 App 开发者的接触点。手机客户端侧,App 需要集成 JPush SDK;服务器端部分,开发者调用 JPush REST API 来进行推送。

Android SDK 服务

JPush Android SDK 是作为 Android Service 长期运行在后台的,从而创建并保持长连接,保持永远在线的能力。

多平台支持

JPush Android SDK 除了 jar 包,还有一个 .so文件,.so文件需要与CPU平台适配,需要支持哪个平台的 CPU,就需要包含这个平台相应的 .so 编译文件。

除支持默认的 ARM CPU 平台之外,JPush SDK 还提供 x86 与 MIPs 平台的 CPU 版本 SDK。请单独到 资源下载 页下载。

电量与流量

JPush Android SDK 由于使用自定义协议,协议体做得极致地小,流量消耗非常地小。

电量方面,JPush Android SDK 经过持续地优化,尽可能减少不必要的代码执行;并且,长期的版本升级迭代,不断地调优,在保证一定的网络连接稳定性的要求小,减少电量消耗。

压缩包说明

供下载的 JPush Android SDK 压缩包,一般包含以下几个部分:

  • .jar 文件
  • .so 文件
  • AndroidManifest.xml 配置示例

其中 .jar, .so 文件有版本号后缀,需要互相匹配。请升级时一定记得检查版本号,并删除旧版本。

AndroidManifest.xml 配置示例可能在版本升级时,会有变更。请留意版本发布说明。

Android SDK 集成

请参考以下文档与教程,来集成 Android SDK。

  • 3分钟快速Demo(Android)
  • Android 集成指南

集成到其他平台

客户端集成插件

Android SDK 集成指南

使用提示

本文是 JPush Android SDK 标准的集成指南文档。用以指导 SDK 的使用方法,默认读者已经熟悉IDE(Eclipse 或者 Android Studio)的基本使用方法,以及具有一定的 Android 编程知识基础。

本篇指南匹配的 JPush Android SDK 版本为:v3.0.0 及以后版本。

  • 3 分钟快速 Demo(Android):如果您想要快速地测试、感受下极光推送的效果,请参考本文在几分钟内跑通Demo。
  • 极光推送文档网站上,有极光推送相关的所有指南、API、教程等全部的文档。包括本文档的更新版本,都会及时地发布到该网站上。
  • 极光社区网站:大家除了文档之外,还有问题与疑问,会到这里来提问题,以及时地得到解答。
  • 如果您看到本文档,但还未下载Android SDK,请访问SDK下载页面下载。

产品功能说明

极光推送(JPush)是一个端到端的推送服务,使得服务器端消息能够及时地推送到终端用户手机上,让开发者积极地保持与用户的连接,从而提高用户活跃度、提高应用的留存率。极光推送客户端支持 Android, iOS 两个平台。

本 Android SDK 方便开发者基于 JPush 来快捷地为 Android App 增加推送功能。

主要功能

  • 保持与服务器的长连接,以便消息能够即时推送到达客户端
  • 接收通知与自定义消息,并向开发者App 传递相关信息

主要特点

  • 客户端维持连接占用资源少、耗电低
  • SDK丰富的接口,可定制通知栏提示样式
  • 服务器大容量、稳定

jpush-android-release-3.x.y.zip 集成压缩包内容

  • AndroidManifest.xml

    • 客户端嵌入SDK参考的配置文件
  • libs/jcore-android.v1.x.y.jar
    • 极光开发者服务的核心包。
  • libs/jpush-android_v3.x.y.jar
    • JPush SDK 开发包。
  • libs/(cpu-type)/libjcore1xy.so
    • 各种CPU类型的native开发包。
  • res
    • 集成SDK必须添加的资源文件
  • example
    • 是一个完整的 Android 项目,通过这个演示了 JPush SDK 的基本用法,可以用来做参考。

Android SDK 版本

目前SDK只支持Android 2.3或以上版本的手机系统。富媒体信息流功能则需Android3.0或以上版本的系统。

jcenter 自动集成步骤

说明 : 使用jcenter自动集成的开发者,不需要在项目中添加jar和so,jcenter会自动完成依赖;在AndroidManifest.xml中不需要添加任何JPush SDK 相关的配置,jcenter会自动导入。

  • 如果开发者需要修改组件属性,可以在本地的 AndroidManifest 中定义同名的组件并配置想要的属性,然后用 xmlns:tools 来控制本地组件覆盖 jcenter 上的组件。示例:

    <manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.android.tests.flavorlib.app"xmlns:tools="http://schemas.android.com/tools"><applicationandroid:icon="@drawable/icon"android:name="com.example.jpushdemo.ExampleApplication"android:label="@string/app_name" ><service android:name="cn.jpush.android.service.PushService"android:process=":multiprocess"tools:node="replace" >……</service>……</application>……
    </manifest>
    
  • 确认android studio的 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', 'armeabi-v8a' // 还可以添加 'x86', 'x86_64', 'mips', 'mips64'}manifestPlaceholders = [JPUSH_PKGNAME : applicationId,JPUSH_APPKEY : "你的appkey", //JPush上注册的包名对应的appkey.JPUSH_CHANNEL : "developer-default", //暂时填写默认值即可.]......}......
    }dependencies {......compile 'cn.jiguang.sdk:jpush:3.0.3'  // 此处以JPush 3.0.3 版本为例。compile 'cn.jiguang.sdk:jcore:1.1.1'  // 此处以JCore 1.1.1 版本为例。......
    }
    

注 : 如果在添加以上 abiFilter 配置之后android Studio出现以下提示:

    NDK integration is deprecated in the current plugin. Consider trying the new experimental plugin.

则在 Project 根目录的gradle.properties文件中添加:

    android.useDeprecatedNdk=true

说明:若没有res/drawable-xxxx/jpush_notification_icon这个资源默认使用应用图标作为通知icon,在5.0以上系统将应用图标作为statusbar icon可能显示不正常,用户可定义没有阴影和渐变色的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以上系统将应用图标作为statusbar icon可能显示不正常,用户可定义没有阴影和渐变色的icon替换这个文件,文件名不要变。

说明 2:使用android studio的开发者,如果使用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

小帖士

如果使用android studio, 可在AndroidManifest中引用applicationId的值,在build.gradle配置中 defaultConfig节点下配置,如:

defaultConfig {applicationId "cn.jpush.example" // <--您应用的包名……}

在AndroidManifest中使用 ${applicationId} 引用gradle中定义的包名

AndroidManifest 示例


<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="您应用的包名"android:versionCode="303"android:versionName="3.0.3"><uses-sdk android:minSdkVersion="9" android:targetSdkVersion="23" /><!-- 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" /><applicationandroid:icon="@drawable/ic_launcher"android:label="@string/app_name"android:name="Your Application Name"><!-- Required SDK 核心功能--><!-- 可配置android:process参数将PushService放在其他进程中 --><serviceandroid: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服务相互拉起的功能。 --><!-- 若不启用该功能可删除该组件,将不拉起其他应用也不能被其他应用拉起 --><serviceandroid: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核心功能--><receiverandroid: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核心功能--><activityandroid: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><!-- SDK核心功能--><activityandroid:name="cn.jpush.android.ui.PopWinActivity"android:configChanges="orientation|keyboardHidden"android:exported="false"android:theme="@style/MyDialogStyle"><intent-filter><category android:name="android.intent.category.DEFAULT" /><category android:name="您应用的包名" /></intent-filter></activity><!-- Required SDK核心功能--><serviceandroid: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. 用户自定义的广播接收器--><receiverandroid:name="您自己定义的Receiver"android:enabled="true"><intent-filter><!--Required 用户注册SDK的intent--><action android:name="cn.jpush.android.intent.REGISTRATION" /> <!--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" /> <!-- 接收网络变化 连接/断开 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="您应用的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 允许应用获取网络信息状态,如当前的网络连接是否有效。

集成 JPush Android SDK 的混淆

  • 请下载4.x及以上版本的proguard.jar, 并替换你Android Sdk "tools\proguard\lib\proguard.jar"

  • 请在工程的混淆文件中添加以下配置:

    -dontoptimize
    -dontpreverify-dontwarn cn.jpush.**
    -keep class cn.jpush.** { *; }-dontwarn cn.jiguang.**
    -keep class cn.jiguang.** { *; }
    
  • v2.0.5 ~ v2.1.7 版本有引入 gson 和 protobuf ,增加排除混淆的配置。(2.1.8版本不需配置)

    #==================gson && protobuf==========================
    -dontwarn com.google.**
    -keep class com.google.gson.** {*;}
    -keep class com.google.protobuf.** {*;}
    

添加代码

JPush SDK 提供的 API 接口,都主要集中在 cn.jpush.android.api.JPushInterface 类里。

基础API

  • init 初始化SDK

    public static void init(Context context)
    
  • setDebugMode 设置调试模式

注:该接口需在init接口之前调用,避免出现部分日志没打印的情况。多进程情况下建议在自定义的Application中onCreate中调用。

    // You can enable debug mode in developing state. You should close debug mode when release.public static void setDebugMode(boolean debugEnalbed)

添加统计代码

  • 参考文档: 统计分析 API

调用示例代码(参考 example 项目)

  • init 只需要在应用程序启动时调用一次该 API 即可。

  • 以下代码定制一个本应用程序 Application 类。需要在 AndoridManifest.xml 里配置。请参考上面 AndroidManifest.xml 片断,或者 example 项目。

    public class ExampleApplication extends Application {
    @Overridepublic void onCreate() {super.onCreate();JPushInterface.setDebugMode(true);JPushInterface.init(this);}
    }
    

测试确认

  • 确认所需的权限都已经添加。如果必须的权限未添加,日志会提示错误。
  • 确认 AppKey(在Portal上生成的)已经正确的写入 Androidmanifest.xml 。
  • 确认在程序启动时候调用了init(context) 接口
  • 确认测试手机(或者模拟器)已成功连入网络 + 客户端调用 init 后不久,如果一切正常,应有登录成功的日志信息
  • 启动应用程序,在 Portal 上向应用程序发送自定义消息或者通知栏提示。详情请参考管理Portal。
    • 在几秒内,客户端应可收到下发的通知或者正定义消息,如果 SDK 工作正常,则日志信息会如下:
[JPushInterface] action:init.......[PushService] Login succeed!

如图所示,客户端启动分为 4 步:

  • 检查 metadata 的 appKey 和 channel ,如果不存在,则启动失败
  • 初始化 JPush SDK,检查 JNI 等库文件的有效性,如果库文件无效,则启动失败
  • 检查 Androidmanifest.xml,如果有 Required 的权限不存在,则启动失败
  • 连接服务器登录,如果存在网络问题,则登陆失败,或者前面三步有问题,不会启动JPush SDK

高级功能

请参考:

API: Android

Android 极光推送相关推荐

  1. android 极光推送测试,Android 3分钟带你集成极光推送

    话不多说 首先申请极光的账号,(官方地址:https://www.jiguang.cn) 1561710140829.png 登录完成之后,先看到这个地方 ,我个人比较喜欢用旧版本,这里点击旧版 15 ...

  2. Android极光推送

    一.首先做一些简单的操作 打开百度首页,然后搜索   ---  极光推送 然后选择打开极光推送的官方网站 打开后,先进行相关的用户名的注册 然后登录进去 在这里面,可以点击文档,然后下载开发所用的开发 ...

  3. android 极光推送解绑,app集成极光推送笔记(angular js)

    出处:极光推送官方文档以及github上的文档 1.安装 一般使用cordova安装(其他安装方式详见文档),命令行输入: cordova plugin add jpush-phonegap-plug ...

  4. android极光推送 消息穿透广告弹窗,极光推送弹出两次消息,请大佬们帮忙指点迷津...

    本帖最后由 m143 于 2021-3-19 11:55 编辑 1.打开APP ,从后端发送推送,APP连续收到2条推送信息2. 打开APP ,APP在后台运行,从后端发送推送(收到一条消息),点击消 ...

  5. Android 极光推送 自定义通知铃声

    公司使用的推送功能使用的是极光推送,对于普通的通知,极光推送API自动集成了声音的提示,但是对于一些特殊的情况,我们就需要自定义声音提示. 有点坑的是极光并没有提供设置自定通知铃声的接口,所以只能自己 ...

  6. android极光推送原理,【揭秘】极光推送ios、Android消息推送达率的原理

    初接触极光推送的使用者,为了衡量消息推送的质量.经常会纠结到消息的"送达率"这个概念.那么究竟什么是消息送达率呢?或者如何正确理解消息的送达情况呢? 基本概念 先来看与消息送达相关 ...

  7. android极光推送判断消息,通过极光推送给Android所有用户发送推送消息

    https://www.cnblogs.com/yueguanguanyun/p/8485381.html 所需jar包,在maven中添加下列依赖: cn.jpush.api jpush-clien ...

  8. android 极光推送混淆,android 混淆文件的编写(proguard-rules.pro)

    压缩级别 -optimizationpasses 5 -dontusemixedcaseclassnames -dontskipnonpubliclibraryclasses -dontpreveri ...

  9. Android 极光推送SDK集成

    1.创建JPush后台应用 在极光推送的开发者平台创建应用 输入应用包名 在应用信息那里可以看到你的APPKey 点击推送设置,设置包名(这个包名会在你的工程中用到),然后保存即可 2.下载资源 从h ...

最新文章

  1. 用户权限项目预测分析
  2. php 下载文件的函数
  3. 作者:崔代锐(1985-),男,百度外卖研发中心技术总监。
  4. 折叠屏究竟是不是智能手机的未来?| 畅言
  5. 主流芯片架构即将变天!
  6. NeatUpload——支持大文件上传的控件
  7. 摩尔庄园手游测评——爷青回or爷青毁?
  8. JSP个人博客网站设计与实现
  9. 烽火HG680-MC_TTL免费升级固件及教程
  10. php 对上传图片尺寸裁切,PHP图片自动裁切应付不同尺寸的显示
  11. python中matplotlib的plot函数
  12. 绑定变量窥视_窥视量子计算与密码学
  13. the crew 服务器维护,飙酷车神 the crew入门指南 新手必看
  14. 玖益科技:商品详情页的提升方法
  15. USB 3.0 Rx Detect之超速U盘的识别
  16. 1336A - Linova and Kingdom
  17. 【ZZULIOJ】1008: 美元和人民币
  18. 多线程处理大数据量查询
  19. 三年级神奇电子计算机教案,人教版三年级上册信息技术教案
  20. 拥抱POL正当时,这里有四个故事五个理由

热门文章

  1. 2010年最骚最有深度的100句话!
  2. Dreamweaver 8序列号
  3. 边缘检测与轮廓跟踪的差异
  4. STM32 Proteus仿真自动刹车系统超声波测距电机控制-0042
  5. TreeMap和HashMap的区别
  6. Diversity-Achieving Slow-DropBlock Network for Person Re-Identification论文阅读
  7. Laravel5.8.x / 8.5.9反序列化复现学习
  8. C语言 return 0 和return 1有什么区别
  9. 怎样申请IMEI号?
  10. 计算机毕业设计javaweb活动报名系统源码