这是第一次利用马克飞象和印象笔记记录实际开发中的经验总结。回首过去几年的工作,在工作的经验的文字记录方面着实欠缺了很多,希望以后能将这个习惯保持下去。
我之前一直从事Android原生应用的开发,前几个月公司有个新产品,决定使用React Native这种跨平台方式进行开发,也算是一个尝试。RN的这个项目由一位有RN开发经验的前端开发人员和一位IOS开发人员进行开发,因为我手里还有其他项目,所以没有一开始就参与到RN的开发当中去。因为其中一位同事是IOS的,所以开发过程中的测试一直是以IOS为主,当项目差不多要出来0.1版本的时候,Android版第三方SDK的集成还需要我这个Android原生开发去做,借此机会,我也就参与到RN的项目中了。
此次主要是RN项目两个第三方SDK(云信和JPush)中的JPush集成的经验总结,相对于集成云信,JPush的集成过程相对来说要简单得太多,总的来说基本上都是按照JPush官网Android SDK集成指南去做的,但是还是有一些坑值得记录一下。
注册账号这个好像没有什么好说的,登录极光官网点击右上角的注册按钮,接下来你就能看到下图所示的页面,输入常用邮箱和能记得住的密码。可能还需要开发者认证什么的,我去看了一下,我的账户应该是没有进行开发者认证,但是推送集成并不影响。
这个是我的个人的极光账号,如果是为公司开发项目,切记让经理去申请一个公司的账号,要不然都以后交接就很麻烦了。
如图我已经创建了几个应用用于测试了。新创建应用点击右上角的创建应用按钮。
在新打开的界面中输入你的app名称,如果我没记错的话,可以随便输个,和你要集成的app真实名称不一样也行,图标传不传看心情。
创建完毕之后,就可以拿到AppKey和Master Secret了,下面集成配置的时候需要用到
集成推荐使用jcenter自动集成,这样子会少很多事,正如官网所说:
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>
buildscript {
repositories {
jcenter()
}
......
}
allprojects {
repositories {
jcenter()
}
}
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 版本为例。
......
}
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.** {*;}
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
JPushInterface.setDebugMode(true);
JPushInterface.init(this);
}
}
过滤日志,检查在应用启动后JPush是否正常 工作,如果正常的话,会输出如下日志
[JPushInterface] action:init
.......
[PushService] Login succeed!
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
}
}
}
}
按照官网的说明,JPush应该会自动使用的应用的图标最为通知栏推送的图标,但是实际运行下来发现并没有。我猜想可能是因为我的应用图标目录使用的是mipmap造成的,于是我新建了drawable-hdpi和drawable-xhdpi两个目录,按照JPush的要求,修改了图片的名称,下面这句是官网的说明:
说明:若没有res/drawable-xxxx/jpush_notification_icon这个资源默认使用应用图标作为通知icon,在5.0以上系统将应用图标作为statusbar icon可能显示不正常,用户可定义没有阴影和渐变色的icon替换这个文件,文件名不要变
于是乎我就按照官网将名称修改为了jpush_notification_icon,但是重新运行程序发现没有用,卸载重新安装还是没有用。
全文毕。。。。
2017-07-03 3:04