Android(安卓)推送:Android(安卓)Studio 集成Jpush的使用教程
- 前言
- 准备
- 使用
- 集成SDK
- 初始化SDK
- 错误解决
前言
本篇博客记录下在AndroidStudio中Jpush推送的使用、遇到的坑及解决。以及在实际项目中的使用。
准备
1,注册帐号,创建应用:
Jpush官网地址:https://www.jpush.cn
2,下载Jpush SDK:
下载地址:http://docs.jpush.io/resources/#android-sdk
这里我下载的是:2.1.3的版本,目录结果如下:
doc:开发文档
exampli:示例工程(eclipse版)
lib:需要导入的jar以及.so文件
res:需要导入的资源
下面分别是studio以及eclipse的示例manifest文件,最后一个是更新日志。
使用
在这里以AndroidStudio演示,因为会有点需要解决的问题。eclipse可以看官方文档。
集成SDK
1,将lib和res目录下的文件copy到我们的项目中:
2,在proguard-rules.pro文件中加入以下混淆代码:
-dontoptimize -dontpreverify -dontwarn cn.jpush.** -keep class cn.jpush.** { *; } #==================gson==========================-dontwarn com.google.** -keep class com.google.gson.** {*;} #==================protobuf======================-dontwarn com.google.** -keep class com.google.protobuf.** {*;}
- 3,配置Manifest文件:
<!-- 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"/>
applicatoin下:
<!-- Required SDK核心功能--><activity android:name="cn.jpush.android.ui.PushActivity" android:configChanges="orientation|keyboardHidden" android:exported="false" android:theme="@android:style/Theme.NoTitleBar"> <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-->
提示:其中applicationId为 build.gradle配置中 defaultConfig节点下配置,如:
defaultConfig { applicationId "com.airsaid.jpushdemo"}
将提示需要填写的地方,填上我们在创建应用后得到的key:
还剩下一个错误,就是需要我们自定义一个广播接受者了,创建一个MyReceiver继承自Broadcast并进行配置:
public class MyReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Bundle bundle = intent.getExtras(); if (JPushInterface.ACTION_NOTIFICATION_OPENED.equals(intent.getAction())) { // 用户打开通知 } }}
注意:如果不自定义MyReceiver的话,默认用户会打开主界面并且接受不到自定义消息。
初始化SDK
创建Applicaton类,初始化SDK:
public class BaseApplicatoin extends Application { @Override public void onCreate() { super.onCreate(); JPushInterface.init(this); JPushInterface.setDebugMode(true); }}
注意在Manifest文件中applicatoin下加入:
android:name=".application.BaseApplicatoin"
错误解决
有很多即使做了以上几步,还是运行不了,出现这个错误:
JPushGlobal] JPush .so file do not match JPush .jar file in the project, Failed to init JPush
造成这个错误的原因是Android Studio没有正确加载这个文件(libjpush210.so)。
我们可以在工程APP目录下找到 build.gradle 文件,打开它
//在android下添加这个一个sourceSets.main sourceSets { main { jniLibs.srcDirs = ['libs'] } }
到这里就可以正常的发送推送了,打开app,发送个推送测试下吧。
更多相关文章
- Android(安卓)获取mp4文件中任意时间点的帧图片(MediaMetadataRe
- android:sharedUserId="android.uid.system" 的使用
- FFMPEG移植到Android(ubuntu环境下)
- Android(安卓)的用户层 uevent处理机制
- Android源代码分析(二) MediaScanner源码分析(上)
- 常用的android开发框架有哪些
- Google ZXing系列讲解(三)——ZXing 目录结构与主体流程
- Android(安卓)Studio 中自带Android(安卓)Monitor监控内存溢出浅
- Android工程目录结构简介