转载请标明出处
http://blog.youkuaiyun.com/mohan6/article/details/72960346
本文作者:【默寒的博客】
集成步骤以及集成过程遇到的坑:
这部分主要阐述了集成极光推送的sdk的步骤,以及我在集成过程中遇到的一些问题。集成步骤只是摘出了极光SDK中必须的骨子的部分,可以满足一般项目Push需求,这里只做了通知消息,自定义的穿透消息请详见极光的SDK集成文档。我主要是总结一下,集成过程中需要注意和可能出问题的地方(详见注的说明),如果你也遇到了类似的问题,希望可以通过这篇文章能迅速把坑填了。LZ表示,这些坑好心塞~
一.jcenter 自动集成步骤
1.确认android studio的 Project 根目录的主 gradle 中配置了jcenter支持。(新建project默认配置就支持,一般不需要配置,只要确认一下就好)
buildscript { repositories { jcenter() } ...... } allprojects { repositories { jcenter() } }
2.在 module 的 gradle 中添加依赖和AndroidManifest的替换变量。
android { ...... defaultConfig { applicationId "com.xxx.xxx" //JPush上注册的包名. ...... ndk { //选择要添加的对应cpu类型的.so库。 abiFilters 'armeabi', 'armeabi-v7a', 'arm64-v8a' // 还可以添加 'x86', 'x86_64', 'mips', 'mips64' } manifestPlaceholders = [ JPUSH_PKGNAME : applicationId, JPUSH_APPKEY : "你的appkey", //JPush上注册的包名对应的appkey. JPUSH_CHANNEL : "自定义渠道名称", //用户渠道统计的渠道名称 ] ...... } ...... } dependencies { ...... compile 'cn.jiguang.sdk:jpush:3.0.5' compile 'cn.jiguang.sdk:jcore:1.1.2' ...... }
注 : 1. 如果在添加以上 abiFilter 配置之后android Studio出现以下提示:
NDK integration is deprecated in the current plugin. Consider trying the new experimental plugin
则在 Project 根目录的gradle.properties文件中添加:
android.useDeprecatedNdk=true
二. AndroidManifest加权限
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.******"> <uses-permission android:name="android.permission.INTERNET"/> <!-- 访问当前网络状态权限 --> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <!-- 获取手机信息 --> <uses-permission android:name="android.permission.READ_PHONE_STATE"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/> <uses-permission android:name="android.permission.DOWNLOAD_WITHOUT_NOTIFICATION"/> <!--2017.5.27 极光推送权限 ym start--> <uses-permission android:name="android.permission.WAKE_LOCK"/> <uses-permission android:name="android.permission.VIBRATE"/> <uses-permission android:name="android.permission.RECEIVE_USER_PRESENT"/> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.WRITE_SETTINGS"/> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/> <permission android:name="com.******(包名).permission.JPUSH_MESSAGE" android:protectionLevel="signature"/> <uses-permission android:name="com.******(包名).permission.JPUSH_MESSAGE"/> <!--2017.5.27 极光推送权限 ym end-->
注 :
1.记得修改极光自定义权限的包名。
2.【访问当前网络状态权限】和【获取手机信息】项目里一般已经添加,这里检查一下,缺的补上。【极光推送权限】是极光要求,但是项目里可能没有的,注意查看。
<permission android:name="com.******(包名).permission.JPUSH_MESSAGE" android:protectionLevel="signature"/> <uses-permission android:name="com.carspass.permission.JPUSH_MESSAGE"/>
三. 集成 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.** { *; }
注 : 别忘了往混淆文件里加这段代码。我第一次集成的时候给忘却了,后来大神找我说minifyEnabled true(minifyEnabled主要用来控制是否运行混淆的。true表示混淆), 极光打包以后不好使,提醒我忘记在混淆文件中加这段代码了。
dontwarn表示打包混淆的时候,消除极光的警告。 keep表示保持极光的一些类,不被混淆。
四. JPushManger极光推送管理类
/** * Created by ym on 2017/5/27. * 极光推送管理类 */ public class JPushManager { private String TAG = "JPushManager"; private final String KEY =