React Native Android JPush消息推送集成
来源:互联网 发布:php网站模板下载不了 编辑:程序博客网 时间:2024/06/05 03:36
React Native JPush消息推送集成
- React Native JPush消息推送集成
- 写在前面
- 正文
- 集成步骤
- JPush注册账号以及创建一个应用
- 开始集成
- 混淆配置
- 在代码中的配置
- 运行你的应用检查JPush是否正常工作
- 上面的都不是重点下面的才是重点
- 开发过程中遇到的坑的总结
- 关于React Native的ndk配置
- 通知图标的自定义
- 开发过程中遇到的坑的总结
写在前面
这是第一次利用马克飞象和印象笔记记录实际开发中的经验总结。回首过去几年的工作,在工作的经验的文字记录方面着实欠缺了很多,希望以后能将这个习惯保持下去。
正文
我之前一直从事Android原生应用的开发,前几个月公司有个新产品,决定使用React Native这种跨平台方式进行开发,也算是一个尝试。RN的这个项目由一位有RN开发经验的前端开发人员和一位IOS开发人员进行开发,因为我手里还有其他项目,所以没有一开始就参与到RN的开发当中去。因为其中一位同事是IOS的,所以开发过程中的测试一直是以IOS为主,当项目差不多要出来0.1版本的时候,Android版第三方SDK的集成还需要我这个Android原生开发去做,借此机会,我也就参与到RN的项目中了。
此次主要是RN项目两个第三方SDK(云信和JPush)中的JPush集成的经验总结,相对于集成云信,JPush的集成过程相对来说要简单得太多,总的来说基本上都是按照JPush官网Android SDK集成指南去做的,但是还是有一些坑值得记录一下。
集成步骤
JPush注册账号以及创建一个应用
注册账号这个好像没有什么好说的,登录极光官网点击右上角的注册按钮,接下来你就能看到下图所示的页面,输入常用邮箱和能记得住的密码。可能还需要开发者认证什么的,我去看了一下,我的账户应该是没有进行开发者认证,但是推送集成并不影响。
登录之后,通过右上角进入控制台
这个是我的个人的极光账号,如果是为公司开发项目,切记让经理去申请一个公司的账号,要不然都以后交接就很麻烦了。
如图我已经创建了几个应用用于测试了。新创建应用点击右上角的创建应用按钮。
在新打开的界面中输入你的app名称,如果我没记错的话,可以随便输个,和你要集成的app真实名称不一样也行,图标传不传看心情。
创建完毕之后,就可以拿到AppKey和Master Secret了,下面集成配置的时候需要用到
开始集成
集成推荐使用jcenter自动集成,这样子会少很多事,正如官网所说:
jcenter会帮我们做很多事情,而不需要我们动手,下面很多都是照搬官网的。
- 如果开发者需要修改组件属性,可以在本地的 AndroidManifest 中定义同名的组件并配置想要的属性,然后用 xmlns:tools 来控制本地组件覆盖 jcenter 上的组件。示例:
- 这个我没有需求用到
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.android.tests.flavorlib.app" xmlns:tools="http://schemas.android.com/tools"> <application android:icon="@drawable/icon" android:name="com.example.jpushdemo.ExampleApplication" android:label="@string/app_name" > <service android:name="cn.jpush.android.service.PushService" android:process=":multiprocess" tools:node="replace" > …… </service> …… </application> ……</manifest>
- 确认android studio的 Project 根目录的主 gradle 中配置了jcenter支持。(新建project默认配置就支持)
buildscript { repositories { jcenter() } ......}allprojects { repositories { jcenter() }}
- 在 module 的 gradle 中添加依赖和AndroidManifest的替换变量。
- 值得一说的是,JPush注册应用的时候并没有用到包名,applicationId这个属性是一般构建项目就默认自动带的,如果没有的话请自行按照你的应用的包名填写。
- 另外对于RN的项目,在ndk添加cpu类型的时候还有一些坑
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' // 此处以JPush 3.0.5 版本为例。 compile 'cn.jiguang.sdk:jcore:1.1.2' // 此处以JCore 1.1.2 版本为例。 ......}
- 最后一点,需要注意在Project根目录中的gradle.properties文件添加
android.useDeprecatedNdk=true
混淆配置
这个很重要,每集成一个第三方sdk,切记要配置混淆,要不然到后面正式release的时候出错,可能半天也找不到问题在哪里
-dontoptimize-dontpreverify-dontwarn cn.jpush.**-keep class cn.jpush.** { *; }-dontwarn cn.jiguang.**-keep class cn.jiguang.** { *; }#==================gson && protobuf==========================-dontwarn com.google.**-keep class com.google.gson.** {*;}-keep class com.google.protobuf.** {*;}
在代码中的配置
- 在自定义的MyAppliCation.java的onCreate()添加初始化的代码
public class MyApplication extends Application {@Override public void onCreate() { super.onCreate(); JPushInterface.setDebugMode(true); JPushInterface.init(this); }}
运行你的应用,检查JPush是否正常工作
过滤日志,检查在应用启动后JPush是否正常 工作,如果正常的话,会输出如下日志
[JPushInterface] action:init ....... [PushService] Login succeed!
- 而如果日志太多的话,可以使用ctrl+f对输出的日志进行搜索
- 记得过滤日志为Show only selected application,同时将调试的应用选成你的,如果输出没有问题的话,就可以尝试测试推送了
上面的都不是重点,下面的才是重点
开发过程中遇到的“坑”的总结
关于React Native的ndk配置
- React Native项目创建过程中,会自动生成相应的Android的project,开发RN的Android版,也都是使用这个project,下图是RN项目工程的示例
- 对于RN的Android版本的开发,实际上就是直接使用Android Studio打开图中的Android目录作为project。
- RN自动生成的Android项目,已经在app下的build.gradle中做了很多配置了,其中的ndk配置是这样的:
android { compileSdkVersion 23 buildToolsVersion "23.0.1" defaultConfig { applicationId "com.awesomeproject" minSdkVersion 16 targetSdkVersion 22 versionCode 1 versionName "1.0" ndk { abiFilters "armeabi-v7a", "x86" } } splits { abi { reset() enable enableSeparateBuildPerCPUArchitecture universalApk false // If true, also generate a universal APK include "armeabi-v7a", "x86" } } buildTypes { release { minifyEnabled enableProguardInReleaseBuilds proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro" } } // applicationVariants are e.g. debug, release applicationVariants.all { variant -> variant.outputs.each { output -> // For each separate APK per architecture, set a unique version code as described here: // http://tools.android.com/tech-docs/new-build-system/user-guide/apk-splits def versionCodes = ["armeabi-v7a":1, "x86":2] def abi = output.getFilter(OutputFile.ABI) if (abi != null) { // null for the universal-debug, universal-release variants output.versionCodeOverride = versionCodes.get(abi) * 1048576 + defaultConfig.versionCode } } }}
- 虽然和标题不相符,但是在这里还是要提一下,buildToolsVersion版本React Native中文官网建议必须使用23.0.1,但是经过我亲测,23.0.3也可以使用,但是25.0.0以上的就不要想了,会有一堆解决不掉的错误,我也不明白为什么
- 回到正文,如上面贴出来的RN自动生成的project中的app的build.gradle的ndk配置了”armeabi-v7a”, “x86”,但是JPush官网的集成指南中有三种,同时还有其他更多的cpu类型的支持
- 但是在RN的项目中,如果多配制那怕一种cpu类型,都会造成在运行的时候报错,我尝试着花费了不少时间去搜索解决方案,然并卵。因为按照之前的开发经验,一般都是配置第三方sdk建议的cpu类型,因为RN的问题,无法再这样做了。同时也因为我手头的测试机有限,对于cpu类型配置不全会造成什么影响还不得而知。
通知图标的自定义
- 在集成完成之后,终于可以愉快滴进行推送测试了,但是发现推送的图标却还是Android机器人,有些不美观。
按照官网的说明,JPush应该会自动使用的应用的图标最为通知栏推送的图标,但是实际运行下来发现并没有。我猜想可能是因为我的应用图标目录使用的是mipmap造成的,于是我新建了drawable-hdpi和drawable-xhdpi两个目录,按照JPush的要求,修改了图片的名称,下面这句是官网的说明:
说明:若没有res/drawable-xxxx/jpush_notification_icon这个资源默认使用应用图标作为通知icon,在5.0以上系统将应用图标作为statusbar icon可能显示不正常,用户可定义没有阴影和渐变色的icon替换这个文件,文件名不要变
于是乎我就按照官网将名称修改为了jpush_notification_icon,但是重新运行程序发现没有用,卸载重新安装还是没有用。
- 机智的我警觉这里面应该是有坑的,于是我百度了一下,在yuanlvmao的博客–关于极光推送通知栏无法正确显示应用图标 找到了答案,,你没有看错,就是要重启一下手机就好了,于是乎我照做了,通知的图标终于正常显示了
全文毕。。。。
2017-07-03 3:04
- React Native Android JPush消息推送集成
- 原生Android项目中集成react-native以及jpush-react-native(极光推送)
- 用 jpush-react-native 插件快速集成推送功能(Android 篇)
- 用 jpush-react-native 插件快速集成推送功能(Android 篇)
- jpush-react-native 插件的集成与使用 Android 篇(推送)
- 用 jpush-react-native 插件快速集成推送功能(Android 篇)
- React Native 集成jpush-react-native
- React-Native集成JPush-react-native及应用设置Tags、Alias(iOS/Android)
- React Native 集成极光推送 JPush出现的一些幺蛾子
- Android Studio 集成JPUSH推送
- 【转】iOS集成 jpush-react-native常见问题
- JPush 推送消息给 Android
- Unity集成JPush本地消息推送问题
- IONIC项目JPUSH消息推送IOS集成
- android消息推送---JPush(极光推送)
- React-Native-iOS推送集成
- react-native 集成极光推送
- android jpush(极光推送)快速集成
- 环信聊天界面的修改(基于官方easeui库)
- 002_设置使用计数的目的
- 入门 Webpack,看这篇就够了
- Hive中文注释乱码问题的解决
- cenos部署tomcat项目
- React Native Android JPush消息推送集成
- MongoDB与Redis的比较
- React生命周期函数
- myeclipse 遇到的一些问题及解决方案
- freemarker获取当前时间和特定时间的对比
- 机动车检测微信预约系统
- java 内部锁和同步机制
- HTML学习笔记-表单
- 简易手动部署多节点的Openstack(L版)——壹(前期准备)