Android SDK 集成指南
最近更新:2023-11-03
展开全部

Android SDK 集成指南

使用提示

本文是 JVerification Android SDK 标准的集成指南文档。

匹配的 SDK 版本为:v2.0.0 及以后版本。

  • 如果您想要快速地测试、请参考本文在几分钟内跑通 Demo。
  • 极光认证文档网站上,有相关的所有指南、API、教程等全部的文档。包括本文档的更新版本,都会及时地发布到该网站上。

产品说明

极光认证整合了三大运营商的网关认证能力,为开发者提供了一键登录和号码认证功能,优化用户注册 / 登录、号码验证体验,提高安全性。

主要场景

  • 注册
  • 登陆
  • 二次验证

获取应用信息

在控制台上 创建应用 后,可以进入【认证设置】-【集成设置】页面获取用以标识应用的 AppKey。

Android 版本

目前 SDK 只支持 Android 4.0 或以上版本的手机系统.

mavenCentral 自动集成方式

说明: 使用 mavenCentral 自动集成的开发者,不需要在项目中添加 jar 和 so,mavenCentral 会自动完成依赖;在 AndroidManifest.xml 中不需要添加任何 SDK 相关的配置,mavenCentral 会自动导入。

  • 确认 android studio 的 Project 根目录的主 gradle 中配置了 mavenCentral 支持。(新建 project 默认配置就支持)
buildscript { repositories {mavenCentral() } ...... } allprojects { repositories {mavenCentral()}}
                  buildscript {
            repositories {mavenCentral() }
            ......
        }

        allprojects {
            repositories {mavenCentral()}}

        
此代码块在浮窗中显示
  • 在 module 的 gradle 中添加依赖和 AndroidManifest 的替换变量。
android { ...... defaultConfig { applicationId "com.xxx.xxx" // 您应用的包名. ...... ndk { // 选择要添加的对应 cpu 类型的 .so 库。 abiFilters 'armeabi', 'armeabi-v7a', 'arm64-v8a' // 还可以添加 'x86', 'x86_64' } manifestPlaceholders = [ JPUSH_PKGNAME : applicationId, JPUSH_APPKEY : "你的 Appkey", //Portal 上注册的包名对应的 appKey. JPUSH_CHANNEL : "developer-default", // 暂时填写默认值即可. ] ...... } ...... } dependencies { ...... implementation 'cn.jiguang.sdk:jverification:3.1.7'// 此处以 3.1.7 版本为例,3.0.0 版本开始可以自动拉取 JCore 包,无需另外配置 ...... }
                  android {
            ......
            defaultConfig {
                applicationId "com.xxx.xxx" // 您应用的包名.
                ......

                ndk {
                    // 选择要添加的对应 cpu 类型的 .so 库。
                    abiFilters 'armeabi', 'armeabi-v7a', 'arm64-v8a'
                    // 还可以添加 'x86', 'x86_64'
                }

                manifestPlaceholders = [
                    JPUSH_PKGNAME : applicationId,
                    JPUSH_APPKEY : "你的 Appkey", //Portal 上注册的包名对应的 appKey.
                    JPUSH_CHANNEL : "developer-default", // 暂时填写默认值即可.
                ]
                ......
            }
            ......
        }


        dependencies {
            ......

            implementation 'cn.jiguang.sdk:jverification:3.1.7'// 此处以 3.1.7 版本为例,3.0.0 版本开始可以自动拉取 JCore 包,无需另外配置
            ......
        }

        
此代码块在浮窗中显示
  • 如果想剔除 JVerify 自动依赖的 JCore,可以使用以下方式:
implementation ('cn.jiguang.sdk:jverification:3.1.7'){ exclude group: 'cn.jiguang.sdk', module: 'jcore'//会自动把 jcore 剔除 }
           implementation ('cn.jiguang.sdk:jverification:3.1.7'){
       exclude group: 'cn.jiguang.sdk', module: 'jcore'//会自动把 jcore 剔除
}

        
此代码块在浮窗中显示
  • 如果使用 JVerify 3.0.0 及以下版本时,需要配置 JCore 依赖:
implementation 'cn.jiguang.sdk:jverification:2.x.x' implementation 'cn.jiguang.sdk:jcore:4.x.x'
          implementation 'cn.jiguang.sdk:jverification:2.x.x'
implementation 'cn.jiguang.sdk:jcore:4.x.x'

        
此代码块在浮窗中显示

添加代码

JVerification SDK 提供的 API 接口,都主要集中在 cn.jiguang.verify.api.JVerificationInterface 类里。

基础 API

  • 初始化 sdk : 传入 application 的 context 来初始化 sdk 。
JVerificationInterface.init(Context context);
                  JVerificationInterface.init(Context context);

        
此代码块在浮窗中显示
  • 设置调试模式:参数为 true 表示打开调试模式,可看到 sdk 的日志。
JVerificationInterface.setDebugMode(boolean isDebugMode);
                  JVerificationInterface.setDebugMode(boolean isDebugMode);

        
此代码块在浮窗中显示

更多 API

其他 API 的使用方法请参考接口文档:Android SDK API

本地工程配置

混淆配置

  • 请下载 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.** {*;} -dontwarn cn.com.chinatelecom.** -keep class cn.com.chinatelecom.** {*;} -dontwarn com.ct.** -keep class com.ct.** {*;} -dontwarn a.a.** -keep class a.a.** {*;} -dontwarn com.cmic.** -keep class com.cmic.** {*;} -dontwarn com.unicom.** -keep class com.unicom.** {*;} -dontwarn com.sdk.** -keep class com.sdk.** {*;} -dontwarn com.sdk.** -keep class com.sdk.** {*;}
                  -dontoptimize
        -dontpreverify

        -dontwarn cn.jpush.**
        -keep class cn.jpush.** {*;}
        -dontwarn cn.jiguang.**
        -keep class cn.jiguang.** {*;}
        
        -dontwarn cn.com.chinatelecom.**
        -keep class cn.com.chinatelecom.** {*;}
        -dontwarn com.ct.**
        -keep class com.ct.** {*;}
        -dontwarn a.a.**
        -keep class a.a.** {*;}
        -dontwarn com.cmic.**
        -keep class com.cmic.** {*;}
        -dontwarn com.unicom.**
        -keep class com.unicom.** {*;}
        -dontwarn com.sdk.**
        -keep class com.sdk.** {*;}

        -dontwarn com.sdk.**
        -keep class com.sdk.** {*;}

        
        

        
此代码块在浮窗中显示

其他集成方式

组包服务集成步骤

组包服务是对手动集成 SDK 的封装服务,通过将 SDK 组合到单独的 jiguang module ,将手动集成的共同配置业务隐藏,开发者只需关注自己本身的个性化配置,减少集成步骤,提高开发者接入效率。

如您需要使用 JVerification 组包服务,请在组包服务界面勾选 JVerification 服务,并 组装 SDK

jpush_android_3m

jiguang_sdk.zip 集成压缩包内容

  • jiguang

    • JIGUANG SDK 组合包
    • 资源文件等已在该包中进行依赖,无需在手动拷贝依赖
  • jiguang-demo

    • JIGUANG SDK 组合包集成 demo。
    • 是一个完整的 Android 项目,通过这个演示了组包服务的基本用法,可以用来做参考。
    • 根据您勾选的服务自动组合构建,组包前预设的相关配置会同时预埋到 demo 中

导入 JIGUANG SDK

通过 AS 将 SDK 作为 module 导入项目

导入步骤:AndroidStudio -> File -> New -> Import Module -> 选择 jiguang 导入

配置 JIGUANG SDK

settings.gradle 配置添加:

include ':jiguang'
          include  ':jiguang'

        
此代码块在浮窗中显示

在应用 module gradle 中 添加 SDK 依赖

android { ...... defaultConfig { applicationId "com.xxx.xxx" //JVerification 上注册的包名. ...... manifestPlaceholders = [ JPUSH_PKGNAME : applicationId, JPUSH_APPKEY : "你的 Appkey", //JVerification 上注册的包名对应的 Appkey. JPUSH_CHANNEL : "developer-default", // 暂时填写默认值即可. ] ...... } ...... } dependencies { ...... implementation project(':jiguang') ...... }
          android {
    ......
    defaultConfig {
        applicationId "com.xxx.xxx" //JVerification  上注册的包名.
        ......

        manifestPlaceholders = [
            JPUSH_PKGNAME : applicationId,
            JPUSH_APPKEY : "你的 Appkey", //JVerification  上注册的包名对应的 Appkey.
            JPUSH_CHANNEL : "developer-default", // 暂时填写默认值即可.
        ]
        ......
    }
    ......
}

dependencies {
    ......

    implementation project(':jiguang')
    ......
}

        
此代码块在浮窗中显示

在应用 module Androidmanifest 中配置

application 标签中添加 android:networkSecurityConfig="@xml/network_security_config" <activity android:name="cn.jiguang.demo.jverification.MainActivity" />
          application 标签中添加
android:networkSecurityConfig="@xml/network_security_config"
<activity android:name="cn.jiguang.demo.jverification.MainActivity" />

        
此代码块在浮窗中显示

在 res 目录下新建 xml 目录,并新建 network_security_config.xml

<?xml version="1.0" encoding="utf-8"?> <network-security-config> <base-config cleartextTrafficPermitted="true"> <trust-anchors> <certificates src="system" /> </trust-anchors> </base-config> </network-security-config>
          <?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <base-config cleartextTrafficPermitted="true">
        <trust-anchors>
            <certificates src="system" />
        </trust-anchors>
    </base-config>
</network-security-config>

        
此代码块在浮窗中显示

手动集成步骤

手动集成压缩包下载链接:前往下载

jverification-android-release-2.x.y.zip 集成压缩包内容

  • AndroidManifest.xml
    • 客户端嵌入 SDK 参考的配置文件
  • libs/jcore-android_v2.x.x.jar
    • sdk 核心包
  • libs/xxx/xx.so
    • sdk 需要用的 so 文件
  • libs/jverification-android-sdk_v2.x.x.jar
    • JVerification SDK 开发包
  • res/xxx
    • JVerification SDK 所需的资源文件
  • assets/xxx
    • JVerification SDK 所需的资源文件
  • example
    • 是一个完整的 Android 项目,通过这个演示了 JVerification SDK 的基本用法,可以用来做参考。

SDK 文件移植

  • 解压缩 jverification-android-2.x.x-release.zip 集成压缩包。
  • 复制 libs/jcore-android-2.x.x.jar 到工程 libs/ 目录下。
  • 复制 libs/jverification-android-2.x.x.jar 到工程 libs/ 目录下。
  • 复制 res/xxx 到工程 res/xxx 对应的目录下。
  • 复制 assets/xxx 到工程 assets/xxx 对应的目录下。
  • 复制 libs/(cpu-type)/xxx.so 到你的工程中存放对应 cpu 类型的目录下。

说明 1:使用 android studio 的开发者,如果使用 jniLibs 文件夹导入 so 文件,则仅需将所有 cpu 类型的文件夹拷进去;如果将 so 文件添加在 module 的 libs 文件夹下,注意在 module 的 gradle 配置中添加一下配置:

android { ...... sourceSets { main {jniLibs.srcDirs = ['libs'] ...... } ...... } ...... }
                  android {
            ......
            sourceSets {
                main {jniLibs.srcDirs = ['libs']
                    ......
                }
                ......
            }
            ......
        }

        
此代码块在浮窗中显示

说明 2:如果你的应用所选的 targetSdkVersion >=28,设备在 Android P 上是默认限制使用 http 请求的,开发者需要做如下配置:

  • 在 res 文件夹下创建一个 xml 文件夹,然后创建一个 network_security_config.xml 文件,文件内容如下:
<?xml version="1.0" encoding="utf-8"?> <network-security-config> <base-config cleartextTrafficPermitted="true"> <trust-anchors> <certificates src="system" /> </trust-anchors> </base-config> </network-security-config>
                  <?xml version="1.0" encoding="utf-8"?>
        <network-security-config>
            <base-config cleartextTrafficPermitted="true">
                <trust-anchors>
                    <certificates src="system" />
                </trust-anchors>
            </base-config>
        </network-security-config>

        
此代码块在浮窗中显示
  • 在 AndroidManifest.xml 文件下的 application 标签增加以下属性:
<application ... android:networkSecurityConfig="@xml/network_security_config" ... />
              <application
        ...
        android:networkSecurityConfig="@xml/network_security_config"
        ...
        />

        
此代码块在浮窗中显示
  • 在 AndroidManifest.xml 文件下的 application 标签增加以下属性:
<application ... <provider android:exported="false" android:authorities="${applicationId}.jiguang.InitProvider" android:name="cn.jpush.android.service.InitProvider"></provider> ... />
              <application
        ...
        <provider
            android:exported="false"
            android:authorities="${applicationId}.jiguang.InitProvider"
            android:name="cn.jpush.android.service.InitProvider"></provider>
        ...
        />

        
此代码块在浮窗中显示

配置 AndroidManifest

AndroidManifest 示例

<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="您应用的包名" android:versionCode="100" android:versionName="1.0.0" > <!-- Required --> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" /> <!-- Optional --> <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /> <!-- 用于开启 debug 版本的应用在 6.0 系统上 层叠窗口权限 --> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> <uses-permission android:name="android.permission.VIBRATE" /> <uses-permission android:name="android.permission.WAKE_LOCK" /> <!-- 地理位置 --> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" /> <!-- 应用列表 --> <uses-permission android:name="android.permission.QUERY_ALL_PACKAGES"/> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:name="Your Application Name"> <!-- since 2.0.0 optional 可选项,使用一键登录功能必须添加 --> <!-- since 2.1.1 optional 可选项,通过 screenOrientation 设置授权页面横竖屏展示 --> <!-- since 2.0.0 optional 可选项,使用一键登录功能必须添加 --> <!-- since 2.1.1 optional 可选项,通过 screenOrientation 设置授权页面横竖屏展示 --> <activity android:name="com.cmic.sso.sdk.activity.LoginAuthActivity" android:theme="@style/ActivityDialogStyle" android:configChanges="orientation|keyboardHidden|screenSize" android:screenOrientation="portrait" android:launchMode="singleTop"> </activity> <!-- 使用认证版本小于 2.9.0 时使用 com.cmic.sso.sdk.activity.LoginAuthActivity--> <!-- <activity--> <!-- android:name="com.cmic.sso.sdk.activity.LoginAuthActivity"--> <!-- android:theme="@style/ActivityDialogStyle"--> <!-- android:configChanges="orientation|keyboardHidden|screenSize"--> <!-- android:screenOrientation="portrait"--> <!-- android:launchMode="singleTop">--> <!-- </activity>--> <!-- 从认证版本 2.9.0 开始使用 com.cmic.gen.sdk.view.GenLoginAuthActivity--> <activity android:name="com.cmic.gen.sdk.view.GenLoginAuthActivity" android:configChanges="orientation|keyboardHidden|screenSize" android:launchMode="singleTop" android:screenOrientation="unspecified" android:theme="@style/ActivityDialogStyle"/> <!-- since 2.0.0 optional 可选项,使用一键登录功能必须添加 --> <!-- since 2.1.1 optional 可选项,通过 screenOrientation 设置授权页面横竖屏展示 --> <activity android:name="cn.jiguang.verifysdk.CtLoginActivity" android:configChanges="orientation|keyboardHidden|screenSize" android:theme="@style/ActivityDialogStyle" android:screenOrientation="portrait" android:launchMode="singleTop"> </activity> <!-- Required --> <meta-data android:name="JPUSH_APPKEY" android:value="您应用的 Appkey"/> <meta-data android:name="JPUSH_CHANNEL" android:value="developer-default"/> <!-- 如果你使用的 JCore 是 2.0.0 及以上的版本,需要额外在 Androidmanifest 中配置一个 Service,以在更多手机平台上获得更稳定的支持,示例如下。(JCore1.x 版本不需要) --> <!-- 可配置 android:process 参数将 Service 放在其他进程中;android:enabled 属性不能是 false --> <!-- 这个是自定义 Service,要继承极光 JCommonService,可以在更多手机平台上使得推送通道保持的更稳定 --> <!-- 如果不配置这个 Service,认证的数据就不会上报 --> <!-- 当使用的 jcore 版本大于 2.8.6,小于 3.3.0 时,需要增加配置 --> <service android:name="xx.xx.XService" android:enabled="true" android:exported="false" android:process=":pushcore"> <intent-filter> <action android:name="cn.jiguang.user.service.action" /> </intent-filter> </service> </application> </manifest>
          <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="您应用的包名"
    android:versionCode="100"
    android:versionName="1.0.0"
    >

    <!-- Required  -->
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />


    <!-- Optional -->
    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /> <!-- 用于开启 debug 版本的应用在 6.0 系统上 层叠窗口权限 -->
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
    <uses-permission android:name="android.permission.VIBRATE" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <!--    地理位置 -->
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />

    <!--    应用列表 -->
    <uses-permission android:name="android.permission.QUERY_ALL_PACKAGES"/>


    

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:name="Your Application Name">

        <!-- since 2.0.0 optional 可选项,使用一键登录功能必须添加  -->
        <!-- since 2.1.1 optional 可选项,通过 screenOrientation 设置授权页面横竖屏展示  -->
        <!-- since 2.0.0 optional 可选项,使用一键登录功能必须添加  -->
        <!-- since 2.1.1 optional 可选项,通过 screenOrientation 设置授权页面横竖屏展示  -->
        <activity
            android:name="com.cmic.sso.sdk.activity.LoginAuthActivity"
            android:theme="@style/ActivityDialogStyle"
            android:configChanges="orientation|keyboardHidden|screenSize"
            android:screenOrientation="portrait"
            android:launchMode="singleTop">
        </activity>
        <!-- 使用认证版本小于 2.9.0 时使用 com.cmic.sso.sdk.activity.LoginAuthActivity-->
<!--        <activity-->
<!--            android:name="com.cmic.sso.sdk.activity.LoginAuthActivity"-->
<!--            android:theme="@style/ActivityDialogStyle"-->
<!--            android:configChanges="orientation|keyboardHidden|screenSize"-->
<!--            android:screenOrientation="portrait"-->
<!--            android:launchMode="singleTop">-->
<!--        </activity>-->
        <!-- 从认证版本 2.9.0 开始使用 com.cmic.gen.sdk.view.GenLoginAuthActivity-->
        <activity
            android:name="com.cmic.gen.sdk.view.GenLoginAuthActivity"
            android:configChanges="orientation|keyboardHidden|screenSize"
            android:launchMode="singleTop"
            android:screenOrientation="unspecified"
            android:theme="@style/ActivityDialogStyle"/>
        <!-- since 2.0.0 optional 可选项,使用一键登录功能必须添加  -->
        <!-- since 2.1.1 optional 可选项,通过 screenOrientation 设置授权页面横竖屏展示  -->
        <activity android:name="cn.jiguang.verifysdk.CtLoginActivity"
            android:configChanges="orientation|keyboardHidden|screenSize"
            android:theme="@style/ActivityDialogStyle"
            android:screenOrientation="portrait"
            android:launchMode="singleTop">
        </activity>

        <!-- Required -->
        <meta-data android:name="JPUSH_APPKEY" android:value="您应用的 Appkey"/>
        <meta-data android:name="JPUSH_CHANNEL" android:value="developer-default"/>

        <!-- 如果你使用的 JCore 是 2.0.0 及以上的版本,需要额外在 Androidmanifest 中配置一个 Service,以在更多手机平台上获得更稳定的支持,示例如下。(JCore1.x 版本不需要) -->
        <!-- 可配置 android:process 参数将 Service 放在其他进程中;android:enabled 属性不能是 false -->
        <!-- 这个是自定义 Service,要继承极光 JCommonService,可以在更多手机平台上使得推送通道保持的更稳定 -->
        <!-- 如果不配置这个 Service,认证的数据就不会上报 -->
                <!-- 当使用的 jcore 版本大于 2.8.6,小于 3.3.0 时,需要增加配置  -->
        <service android:name="xx.xx.XService"
                 android:enabled="true"
                 android:exported="false"
                 android:process=":pushcore">
                 <intent-filter>
                     <action android:name="cn.jiguang.user.service.action" />
                 </intent-filter>
        </service>   

    </application>
</manifest>

        
此代码块在浮窗中显示

运行 Demo

压缩包附带的 example 是一个 API 演示例子。你可以将它导入到你的工程,并将你的 appKey 填入到 example 的 AndroidManifest 中,然后直接运行起来测试。

技术支持

邮件联系:support@jiguang.cn

文档内容是否对您有帮助?

Copyright 2011-2022, jiguang.cn, All Rights Reserved. 粤ICP备12056275号-13 深圳市和讯华谷信息技术有限公司

在文档中心打开