主要功能

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

SDK集成步骤

1、导入 SDK 开发包到你自己的应用程序项目

  • 解压缩 jpush-sdk_v1.x.y.zip 集成压缩包
  • 复制 libs/jpush-sdk-release1.x.y.jar 到工程 libs/ 目录下
  • 复制 libs/armeabi/libjpush1xy.so 到工程 libs/armeabi 目录下

    如果您的项目有 libs/armeabi-v7a 这个目录,请把armeabi 的so文件 也复制一份到这个目录。

2、配置 AndroidManifest.xml

根据 SDK 压缩包里的 AndroidManifest.xml 样例文件,来配置应用程序项目的 AndroidManifest.xml 。

主要步骤为:

  1. 复制备注为 "Required" 的部分
  2. 将备注为替换包名的部分,替换为当前应用程序的包名
  3. 将AppKey替换为在Portal上注册该应用的的Key,例如(9fed5bcb7b9b87413678c407)
    权限配置:
    <?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"
    > <!-- 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.SYSTEM_ALERT_WINDOW"/>
    <uses-permission android:name="android.permission.WRITE_SETTINGS" /> <!--since 1.6.0 --> <!-- Optional. Required for location feature -->
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_UPDATES" />
    <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 -->
    <receiver
    android:name="cn.jpush.android.service.PushReceiver"
    android:enabled="true" >
    <intent-filter android:priority="1000"> <!--since 1.3.5 -->
    <action android:name="cn.jpush.android.intent.NOTIFICATION_RECEIVED_PROXY" /> <!--since 1.3.5 -->
    <category android:name="Your Package" /> <!--since 1.3.5 -->
    </intent-filter> <!--since 1.3.5 -->
    <intent-filter>
    <action android:name="android.intent.action.USER_PRESENT" />
    <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
    </intent-filter>
    <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:theme="@android:style/Theme.Translucent.NoTitleBar"
    android:configChanges="orientation|keyboardHidden" >
    <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" /> <!-- 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>

4.添加代码

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

基础 API

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

添加统计代码

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

  • 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);
     }
}

5、测试确认

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

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

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

JPush开发的更多相关文章

  1. JMessage是让App 同时集成 Push 功能与 IM 功能最完美的方案

    历经几个月的沉寂,以及兄弟们的奋战,极光推送的兄弟产品诞生了:极光IM,英文名 JMessage. 极光IM 是我们团队基于大量客户的需求反馈,在很多客户的殷切期盼下所开发的.团队成员一方面要支撑极光 ...

  2. JPush极光推送 Java调用服务器端API开发

       极光推送是:使得开发者可以即时地向其应用程序的用户推送通知或者消息,与用户保持互动,从而有效地提高留存率,提升用户体验.简单的说就是通过JPush后台管理网站进行app消息的推送.可以让用户及时 ...

  3. 李洪强iOS开发之极光推送JPush

    李洪强iOS开发之极光推送JPush

  4. JPush Android 推送如何区分开发、生产环境

    我们 Android 开发者在使用极光推送时可能会发现,在通过官方控制台进行推送时.只有 iOS 区分了开发和生产环境,而 Android 则没有.但实际开发中又确实经常需要针对开发和生产环境分别来推 ...

  5. atitit.极光消息推送服务器端开发实现推送  jpush v3. 总结o7p

    atitit.极光消息推送服务器端开发实现推送  jpush v3. 总结o7p 1. 推送所设计到底功能1 1.1. 内容压缩1 1.2. 多引擎1 2. reg  ,设置appkey and pw ...

  6. Android开发之第三方推送JPush极光推送知识点详解 学会集成第三方SDK推送

    作者:程序员小冰,CSDN博客:http://blog.csdn.net/qq_21376985 下面是一些知识点介绍,后期将会带领大家进行代码实战: 一.Android实现推送方式解决方案: 1.推 ...

  7. 跨平台移动开发 Android使用JPush推送消息

    二话不说,直接上图,看效果 第一步在官网下载 Android Push SDK https://www.jpush.cn/sdk/android 第二步 创建注册帐号,应用 第三步  下载应用,导入l ...

  8. iOS开发中常见问题集锦

    在iOS开发中,会出现各种各样的问题.今天,就把这些常见的问题以及各位大牛的解决方案汇总下,方便以后查阅: 常见错误: 1. linker command failed with exit code ...

  9. 极光推送Jpush(v3)服务端PHP版本的api脚本类

    原文地址:http://www.dodobook.net/php/780 关于极光推送的上一篇文章已经说明了,此处就不多说了.使用v3版本的原因是v2使用到2014年年底就停止了.点击查看上一篇的地址 ...

随机推荐

  1. 使用Navicat V8.0创建数据库,外键出现错误ERROR 1005: Can’t create table (errno: 121)

    ERROR 1005: Can't create table (errno: 121) errno 121 means a duplicate key error. Probably the tabl ...

  2. Python 科学计算涉及模块

    模块1.数据基础 numpy 模块2.数值运算 scipy 模块3.符号运算 sympy 模块4.图形绘制 matplotlib

  3. https://github.com/yrs244742688/GeneratePemWithMoAndEx RSA加密

    <RSAKeyValue> <Modulus> xA7SEU+e0yQH5rm9kbCDN9o3aPIo7HbP7tX6WOocLZAtNfyxSZDU16ksL6 Wjuba ...

  4. Jenkins 搭建U3D自动发布 IOS

    http://www.cnblogs.com/yinghuochong/archive/2013/09/01/3294940.html 1.安装包,工具略过. 2.插件管理 Subversion Pl ...

  5. struts2.3.16所需的基本的jar包

    jar包放多了就报Exception什么Unable to load....上网搜了半天也没有能解决的 下面所说的jar包放到WEB-INF/lib以及tomcat/lib中 通过我一个一个添加到to ...

  6. JavaScript的Eval与JSON.parse的区别

    JavaScript的Eval与JSON.parse的区别 json的定义以及用法: JSON(JavaScript Object Notation)是一种轻量级的数据格式,采用完全独立于语言的文本格 ...

  7. font-family属性与字体对齐

    css中的font-family属性可以让我们自定义字体.在页面前端,宋体已经明日黄花,号称最贵中文字体的微软雅黑大行其道.英文字体万年不变,依然还是"arial","v ...

  8. Bootstrap幻灯轮播如何支持触屏左右滑动手势?

    最近ytkah在学习用bootstrap搭建网站,Bootstrap能自适应pc端和手机端,并且移动设备优先,适合现如今移动营销.bootstrap是封装好的框架,需要某些功能只需调用相应的组件就可以 ...

  9. JSONModel - 字符串换转实体类

     JSONModel https://github.com/icanzilb/JSONModel/ 一. 获取属性的元数据 const char *attrs = property_getAttrib ...

  10. [Android界面] 如何 去掉dialog的黑色背景和边框 DEMO

    android系统的默认对话框是黑色背景,白色边框的样式,对于android系统来说是相当漂亮的,可是与自己的项目风格不搭,所以只好想办法重写他的样式了,当然dialog是支持样式重写的 使用new ...