1.适用范围

Java8

Kotlin:1.3.11

Gradle:3.1.2

Android Studio:3.2

2.集成准备

在配置CC阅读android客户端前,请先申请阿里热修复,友盟统计,新浪,QQ,微信等第三方平台的APPkey,广告目前接入的是广点通广告,如需要,申请广点通广告位。如需推送功能,目前支持小米推送及华为推送,请申请相应功能。

阿里热修复   https://help.aliyun.com/product/51340.html

友盟统计   https://www.umeng.com

新浪微博   https://open.weibo.com/

QQ   https://connect.qq.com/index.html

微信   https://open.weixin.qq.com/

广点通   https://e.qq.com/dev/index.html

小米推送   https://dev.mi.com/console/appservice/push.html

华为推送   https://developer.huawei.com/consumer/cn/service/hms/pushservice.html

支付宝   https://open.alipay.com/platform/home.htm

阿里短信 https://help.aliyun.com/product/44282.html

微信支付   https://pay.weixin.qq.com/index.php/core/home/login?return_url=%2F

3.配置文件

1.在Android Studio工程中的App模块中的SophixStubApplication文件中配置阿里热修复的相关信息:

@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
// 如果需要使用MultiDex,需要在此处调用。
MultiDex.install(this);
initSophix();
}
private void initSophix() {
String appVersion = \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"0.0.0\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\";
try {
appVersion = this.getPackageManager()
.getPackageInfo(this.getPackageName(), 0)
.versionName;
} catch (Exception e) {}
final SophixManager instance = SophixManager.getInstance();
instance.setContext(this)
.setAppVersion(appVersion)
.setSecretMetaData(\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"appkey\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\", \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"appsecret\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\", \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"appsecretToken\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\")
.setEnableDebug(true)
.setEnableFullLog()
.setPatchLoadStatusStub(new PatchLoadStatusListener() {
@Override
public void onLoad(final int mode, final int code, final String info, final int handlePatchVersion) {
if (code == PatchStatus.CODE_LOAD_SUCCESS) {
Log.i(TAG, \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"sophix load patch success!\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\");
} else if (code == PatchStatus.CODE_LOAD_RELAUNCH) {
// 如果需要在后台重启,建议此处用SharePreference保存状态。
Log.i(TAG, \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"sophix preload patch success. restart app to make effect.\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\");
}
}
}).initialize();
}
如不需要此功能,在AndroidManifest.xml中修改application的name为BookStoreApplication,并在BookStoreApplication类的onCreate方法中注释或删除SophixManager.getInstance().queryAndLoadNewPatch()

2.在Android Studio工程中的App模块中的BookStoreApplication文件中,配置友盟相关信息及三方信息,用于三方登录及分享功能:

UMConfigure.init(this, \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"友盟key\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\",”渠道”, UMConfigure.DEVICE_TYPE_PHONE, \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\")
setScenarioType(this, MobclickAgent.EScenarioType.E_UM_NORMAL)
/**
* 设置组件化的Log开关
* 参数: boolean 默认为false,如需查看LOG设置为true
*/
UMConfigure.setLogEnabled(BuildConfig.DEBUG_MODE)
PlatformConfig.setWeixin(\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"appkey\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\", \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"appsecret\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\")
PlatformConfig.setSinaWeibo(\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"appkey\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\", \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"appsecret\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\", \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"授权回调地址\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\")
PlatformConfig.setQQZone(\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"appkey\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\", \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"appsecret\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\")
注意QQ除了在这儿配置外,在AndroidManifest.xml中也需要配置
/**
* 友盟-QQ
*/
<activity
android:name=\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"com.tencent.tauth.AuthActivity\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"
android:launchMode=\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"singleTask\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"
android:noHistory=\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"true\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\">
<intent-filter>
<action android:name=\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"android.intent.action.VIEW\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\" />
<category android:name=\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"android.intent.category.DEFAULT\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\" />
<category android:name=\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"android.intent.category.BROWSABLE\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\" />
<data android:scheme=\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"tencentAPPKEY\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\" />
</intent-filter>
</activity>
在AndroidManifest.xml还需要配置友盟的渠道
/**
* Channel ID用来标识App的推广渠道,作为推送消息时给用户分组的一个维度
*/
<meta-data
android:name=\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"UMENG_CHANNEL\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"
android:value=\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"${CHANNEL_VALUE}\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\" />

3.在Android Studio工程中的App模块中的BookStoreApplication文件中,配置推送相关功能。小米推送:

private fun initMiuiPush() {
if (shouldInit()) {
MiPushClient.registerPush(this, \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"AppID\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\", \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"AppKey\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\")
}
// 打开Log
val newLogger = object : LoggerInterface {
override fun setTag(tag: String) {
// ignore
}
override fun log(content: String, t: Throwable) {
Log.d(TAG, content, t)
}
override fun log(content: String) {
Log.d(TAG, content)
}
}
Logger.setLogger(this, newLogger)
}
华为推送主要配置在AndroidManifest.xml中:
/**
* 华为推送
*/
<meta-data
android:name=\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"com.huawei.hms.client.appid\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"
android:value=\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"appid=******\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\" />
<meta-data
android:name=\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"com.huawei.hms.version\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"
android:value=\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"2.6.1.301\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\" />
华为推送接收到的数据为scheme类型,需要自信配置相应参数
/**
* 接入HMSSDK 需要注册的应用下载服务 | Access HMSSDK need to register app download service
*/
<service
android:name=\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"com.huawei.updatesdk.service.deamon.download.DownloadService\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"
android:exported=\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"false\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\" />
<activity android:name=\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\".book_push.HuaWeiReceiverActivity\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\">
<intent-filter>
<action android:name=\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"android.intent.action.VIEW\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\" />
<category android:name=\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"android.intent.category.DEFAULT\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\" />
<data
android:host=\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"自定义域名\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"
android:path=\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"/地址\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"
android:scheme=\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"customscheme\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\" />
</intent-filter>
</activity>

4.在CommenTag文件中,配置广点通广告:

const val AD_APPKEY = \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"******\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"
// 开屏页广告位
const val AD_SPLASH_KEY = \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"******\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"
//阅读页底部广告位
const val AD_BANNER_KEY = \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"******\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"
//阅读页章节末尾广告位
const val AD_NATIVE_IMAGE = \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"******\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"
//首页banner最后一页展示广告位
const val AD_NATIVE_BANNER_IMAGE = \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"******\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"

5.配置友盟统计多渠道,在config.gradle中定义渠道名称(示例中为渠道cc1/cc2/cc3/cc4)

channel = [
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"cc1\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\" : \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"cc1\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\',
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"cc2\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\" : \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"cc2\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\',
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"cc3\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\" : \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"cc3\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\',
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"cc4\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\" : \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"cc4\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\',
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"cc5\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\" : \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"cc5\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
]
在app模块中的build.gradle中引用相应渠道同时,在readviewlibrary中的build.gradle中应用相应渠道
productFlavors {
cc1 {
manifestPlaceholders = [CHANNEL_VALUE:channel[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"cc1\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"]]
buildConfigField \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"String\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\", \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"DEBUG_CHANNEL\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\", channel[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"cc1\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"]
versionCode rootProject.ext.android_version.ccVersionCode
versionName rootProject.ext.android_version.ccVersionName
}
cc2 {
manifestPlaceholders = [CHANNEL_VALUE: channel[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"cc2\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"]]
buildConfigField \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"String\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\", \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"DEBUG_CHANNEL\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\", channel[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"cc2\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"]
versionCode rootProject.ext.android_version.ccVersionCode
versionName rootProject.ext.android_version.ccVersionName
}
cc3 {
manifestPlaceholders = [CHANNEL_VALUE: channel[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"cc3\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"]]
buildConfigField \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"String\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\", \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"DEBUG_CHANNEL\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\", channel[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"cc3\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"]
versionCode rootProject.ext.android_version.ccVersionCode
versionName rootProject.ext.android_version.ccVersionName
}
cc4 {
manifestPlaceholders = [CHANNEL_VALUE: channel[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"cc4\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"]]
buildConfigField \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"String\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\", \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"DEBUG_CHANNEL\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\", channel[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"cc4\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"]
versionCode rootProject.ext.android_version.ccVersionCode
versionName rootProject.ext.android_version.ccVersionName
}
}
productFlavors {
cc1 {
buildConfigField \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"String\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\", \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"DEBUG_CHANNEL\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\", rootProject.ext.channel[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"cc1\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"]
}
cc2 {
buildConfigField \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"String\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\", \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"DEBUG_CHANNEL\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\", rootProject.ext.channel[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"cc2\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"]
}
cc3 {
buildConfigField \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"String\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\", \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"DEBUG_CHANNEL\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\", rootProject.ext.channel[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"cc3\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"]
}
cc4 {
buildConfigField \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"String\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\", \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"DEBUG_CHANNEL\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\", rootProject.ext.channel[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"cc4\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"]
}
}
6.微信支付配置,注意微信登录及微信支付结果回调类WXEntryActivity和WXPayEntryActivity是在包名文件夹下的wxapi中,属于最外层的一级文件夹。

7.关于友盟配置签名文件,在app模块下的build.gradle中配置应用的签名文件

signingConfigs {
debug {
toreFile file(\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'jks文件地址\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\')
storePassword \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"*********\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"
keyAlias \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"*****\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"
keyPassword \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"*********\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"
}
release {
storeFile file(\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'jks文件地址\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\')
storePassword \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"*******\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"
keyAlias \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"*****\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"
keyPassword \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"**********\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"
}
}

    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。

    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。 若排除这种情况,可在对应资源底部留言,或联络我们。

    对于会员专享、整站源码、程序插件、网站模板、网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。

    如果您已经成功付款但是网站没有弹出成功提示,请联系站长提供付款信息为您处理

    源码素材属于虚拟商品,具有可复制性,可传播性,一旦授予,不接受任何形式的退款、换货要求。请您在购买获取之前确认好 是您所需要的资源