• 前言
  • 准备
  • 使用
    • 集成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,发送个推送测试下吧。

更多相关文章

  1. Android(安卓)获取mp4文件中任意时间点的帧图片(MediaMetadataRe
  2. android:sharedUserId="android.uid.system" 的使用
  3. FFMPEG移植到Android(ubuntu环境下)
  4. Android(安卓)的用户层 uevent处理机制
  5. Android源代码分析(二) MediaScanner源码分析(上)
  6. 常用的android开发框架有哪些
  7. Google ZXing系列讲解(三)——ZXing 目录结构与主体流程
  8. Android(安卓)Studio 中自带Android(安卓)Monitor监控内存溢出浅
  9. Android工程目录结构简介

随机推荐

  1. Android之SQLite分页表格
  2. Android(安卓)Studio查看SHA1和MD5(附带ke
  3. 聊聊 Android(安卓)开发的现状和思考
  4. [Android]设备中的分区信息详解
  5. 编写优美Android注释的常用语法
  6. Android(安卓)23以下 checkSelfPermissio
  7. android oauth 微博客户端 架构一
  8. android中常见的网络框架
  9. android的hashmap 原理以及源码探究
  10. Android关于显示悬浮窗权限的转载