前几天在使用第三方推送工具JPush,由于官网上的文档是根据eclispe ADT开发工具来写的,所以使用Android studio的我走过不少坑。虽说真正配置起来并不难,但还是有必要整理一下过程。

创建应用

在JPsuh上创建应用,并下载SDK。由于像其他第三方应用一样,JPush内部应该是使用包名与appKey相互对应来查找app并执行推送的,所以如果有某一项不匹配,最终项目是跑不起来的。


集成SDK

官网在这一步上只演示了eclipse的配置方法。Android studio的配置如下:

在项目的main文件夹下新建一个文件夹jniLibs,将SDK上的libs文件夹里所有.so文件复制进去,同时也把SDK的libs文件夹所有文件(包括.jar)复制到项目的libs里面,将.jar加进编译库里(add as library)。.so文件是C++的函数库,能够被Android调用,不同的版本是对应不同的CPU平台,全部加进去是为了适配大部分的手机。

由于新建了jniLibs文件夹,需要被gradle编译到,所以需要在build.gradle(Module:app)里面添加

sourceSets{

main{

jniLibs.srcDirs = ['libs']

}

}


排出代码混淆

根据官网指示,JPush SDK在发布时已经添加了混淆,所以在项目里如果再次添加混淆的话,会发生错误。所以我们需要在Android studio的混淆配置文件中添加配置,使得这次不再混淆sdk部分。官网上的说的proguard-android.txt在Android studio上变成了proguard-rules.pro。在proguard-rules.pro上添加:

-dontoptimize-dontpreverify-dontwarn cn.jpush.**-keep class cn.jpush.** { *; }#==========v2.0.5版本以上需要额外添加===============

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

如果只是debug版本的话,不需要添加也可以运行。如果是release版本的话,代码会进行混淆,所以需要添加,不然会出错。

权限以及组件

想要项目跑起来,JPush需要添加一些权限以及写好的service、receiver等。以下搬了官网上的示例:

主要步骤:

1.复制备注为“Require”的部分

2.替换自己的应用包名

3.添加上自己创建的应用的appkey

AndroidManifest

<?xml version="1.0" encoding="utf-8"?<manifest xmlns:android="http://schemas.android.com/apk/res/android"     package="您应用的包名"      android:versionCode="205"     android:versionName="2.0.5"     >     <uses-sdk android:minSdkVersion="11" android:targetSdkVersion="17" />     <!-- Required 自定义用来收发消息的相关权限 -->     <permission         android:name="${applicationId}.permission.JPUSH_MESSAGE"         android:protectionLevel="signature" />     <!-- Required 一些系统要求的权限,如访问网络等-->     <uses-permission android:name="${applicationId}.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.WRITE_SETTINGS" />     <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.ACCESS_WIFI_STATE" />      <!-- Optional for location -->     <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" />     <application         android:icon="@drawable/ic_launcher"         android:label="@string/app_name">         <!-- 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="${applicationId}" />             </intent-filter>         </activity>         <!-- Required SDK核心功能-->         <service             android:name="cn.jpush.android.service.DownloadService"             android:enabled="true"             android:exported="false" >         </service>         <!-- Required SDK 核心功能-->         <!-- option since 2.0.5 可配置PushService,DaemonService,PushReceiver,AlarmReceiver的android:process参数 将JPush相关组件设置为一个独立进程 -->         <!-- 如:android:process=":remote" -->         <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="${applicationId}"/>             </intent-filter>         </service>         <!-- Required SDK核心功能-->         <receiver             android:name="cn.jpush.android.service.PushReceiver"             android:enabled="true"             android:exported="false">             <intent-filter android:priority="1000">                 <action android:name="cn.jpush.android.intent.NOTIFICATION_RECEIVED_PROXY" /> <!--Required 显示通知栏 -->                 <category android:name="${applicationId}" />             </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核心功能-->         <receiver android:name="cn.jpush.android.service.AlarmReceiver" />         <!-- User defined. 用户自定义的广播接收器-->         <receiver             android:name="您自己定义的Receiver"             android:enabled="true">             <intent-filter>                 <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 用户接收SDK通知栏信息的intent-->                 <action android:name="cn.jpush.android.intent.NOTIFICATION_OPENED" /> <!--Required 用户打开自定义通知栏的intent-->                 <action android:name="cn.jpush.android.intent.ACTION_RICHPUSH_CALLBACK" /> <!--Optional 用户接受Rich Push Javascript 回调函数的intent-->                 <action android:name="cn.jpush.android.intent.CONNECTION" /><!-- 接收网络变化 连接/断开 since 1.6.3 -->                 <category android:name="${applicationId}" />             </intent-filter>         </receiver>         <!-- Required . Enable it you can get statistics data with channel -->         <meta-data android:name="JPUSH_CHANNEL" android:value="developer-default"/>         <meta-data android:name="JPUSH_APPKEY" android:value="您应用applicationId对应的appKey" /> <!-- </>值来自开发者平台取得的AppKey-->     </application></manifest> 

启动JPush

在Activity类中,适当地调用API,实现JPush的启动。API为:

JPushInterface.init(this);

项目里面的JPush就跑起来了。JPush主要是建立一个与JPush服务端的长连接,当后台发送消息到具体appkey或特定用户时,该长连接便会收到消息,后面就是表现层做的工作了。


后台推送

登录应用的后台,选择发送信息的选项,点击发送

Android端收到信息:

虽然接收速度不像官方说得那么快,但在可接受的范围之内。

创建应用也会带有一个master key,主要是用于服务端API调用,提供给服务器去调用发送推送,不用人工去编辑发送。

Android开发使用了很多的开发工具,每一个都有自己一套配置规则语句,更多的时候需要我们不断的学习、进步。


JPush配置友情链接:http://docs.jpush.io/guideline/android_guide/

---------------------------------------如有问题,请积极联系本人,谢谢!----------------------------------------------------------

更多相关文章

  1. 【Android企业级开发案例分享】仿西瓜视频主页面框架,自定义GridL
  2. [置顶] [Android(安卓)Studio 权威教程]配置出“NB”的Android(安
  3. Android(安卓)添加白名单实现保活
  4. Android仿微信添加联系人列表,内附有截图和demo源码
  5. Android(安卓)NDK 开发入门环境配置与小例子
  6. Android(安卓)studio项目发布到Maven中央库
  7. 如何把React Native嵌入到原生android应用中
  8. Android中实现为TextView添加多个可点击的文本
  9. Android(安卓)添加按电源键结束通话

随机推荐

  1. 判断当前是电脑还是手机打开网页
  2. Android使用adb命令对手机进行截屏保存到
  3. Android APP OPS移除应用程序项目的修改
  4. SharedPreferences存储数据的使用方法(转)
  5. Android垂直跑马灯效果
  6. Android开源项目分类汇总【老外汇总版本
  7. 在android中获取系统正在运行的进程
  8. Android应用程序键盘(Keyboard)消息处理机
  9. Android外部存储(/storage/emulated/0)无
  10. Android中获取TextView和EditText中的文