Android SDK 集成文档
集成前必读:
由于微信小程序和APP交互的限制,APP调起小程序要求APP必须在微信开放平台已经认证,如果没有认证无法调起微信小程序,集成前请先前往微信开放平台进行认证。如果已经集成过微信登录、微信支付或者微信的分享则可以直接使用。
一、集成 SDK
方式一:Maven集成
implementation 'com.jijiancode:jjcode-sdk-android:1.4.0'
方式二:手动集成
SDK 依赖于 微信SDK,如果之前未集成过微信SDK,需引入微信SDK, 可参考微信官方接入文档。
前往下载最新版的Android SDK。前往下载
将 jijiancodesdk-android-xxx.aar 文件复制到app module目录下的libs文件夹中, 然后打开app module目录下的
build.gradle
配置文件,在android
一栏中添加依赖:repositories { flatDir { dirs 'libs' } }
然后再在
dependencies
一栏中添加:implementation(name: 'jijiancodesdk-android-[最新SDK版本号].aar', ext: 'aar')
二、配置 APP_ID
和 微信 APP_ID
在 AndroidManifest.xml 文件中的 application 标签内设置 appId
<meta-data
android:name="com.jijiancode.APP_ID"
android:value="JIJIANCODE_APP_ID"/>
<meta-data
android:name="com.jijiancode.WX_APP_ID"
android:value="WX_APP_ID"/>
请将 JIJIANCODE_APP_ID 替换成 JiJianCode 为应用分配的 AppId , 请将WX_APP_ID 替换成 微信分配的 AppId
三、初始化
在自定义的Application
的onCreate()
中初始化 JiJianCode。 如果没有自定义Application
可以参考下面示例代码自定义Application
。
示例代码
在Application
中调用初始化代码。
public class MyApp extends Application {
...
@Override
public void onCreate() {
super.onCreate();
JJCode.init(this);
}
...
}
注意: 请您确保在主进程中调用 init() 方法,否则可能会导致错误
在AndroidManifest.xml
中的application
标签中添加android:name=".MyApp"
指定自定义的Application
类。
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:name=".MyApp"
android:theme="@style/AppTheme">
...
</application>
四、配置 WXEntryActivity
微信小程序打开App会回调 WXEntryActivity
的 onResp
方法。WXEntryActivity
需要按照要求放在 {$applicationId}.wxapi
的包下,如果你的AndroidManifest.xml
中指定的 package
和 applicationId
不同,要放在applicationId
的包名下,否则不能正常回调。
1. 已存在 WXEntryActivity
如果已经存在 WXEntryActivity
,请在onResp(BaseResp baseResp)
中调用 JJCode.handleWXResp(baseResp)
用于处理微信的回调。
@Override
public void onResp(BaseResp resp) {
if (resp.getType() == ConstantsAPI.COMMAND_LAUNCH_WX_MINIPROGRAM) {
WXLaunchMiniProgram.Resp launchMiniProResp = (WXLaunchMiniProgram.Resp) resp;
String extraData = launchMiniProResp.extMsg;
if (JJCode.handleWXResp(extraData)) {
finish();
}
}
// ...原来的业务逻辑
}
2. 不存在 WXEntryActivity
方案一:快速集成
在主工程的 AndroidManifest.xml 中的 application 标签下加入下面的代码:
<activity-alias
android:name="${applicationId}.wxapi.WXEntryActivity"
android:exported="true"
android:launchMode="singleTop"
android:targetActivity="cn.net.shoot.jijiancodesdk.wxapi.JJCodeWXEntryActivity"
android:taskAffinity="${applicationId}"
android:theme="@style/JJCodeDisablePreviewTheme">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity-alias>
方案二:手动集成
新建WXEntryActivity
放在 {$applicationId}.wxapi
的包下,内容如下:
public class WXEntryActivity extends AppCompatActivity implements IWXAPIEventHandler {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
IWXAPI api = WXAPIFactory.createWXAPI(this,
WX_APP_ID,true);
// 将应用的appId注册到微信
api.registerApp(WX_APP_ID);
api.handleIntent(getIntent(), this);
}
@Override
public void onReq(BaseReq baseReq) {
}
@Override
public void onResp(BaseResp resp) {
if (resp.getType() == ConstantsAPI.COMMAND_LAUNCH_WX_MINIPROGRAM) {
WXLaunchMiniProgram.Resp launchMiniProResp = (WXLaunchMiniProgram.Resp) resp;
String extraData = launchMiniProResp.extMsg;
if (JJCode.handleWXResp(extraData)) {
finish();
}
}
}
}
请将代码中的
WX_APP_ID
替换成 微信为你的应用分配的APP_ID
.
同时,在AndroidManifest.xml
中为WXEntryActivity
指定一个透明的样式。
<activity android:name=".WXEntryActivity"
android:exported="true"
android:taskAffinity="PACKAGE_NAME"
android:launchMode="singleTask"
android:theme="@style/wxEntry"/>
请将代码中的
PACKAGE_NAME
替换为你的自己包名
其中的 wxEntry
的样式大致如下,可以根据自己的样式需要进行修改。
<style name="wxEntry" parent="Theme.AppCompat.NoActionBar">
<!-- 边框 -->
<item name="android:windowFrame">@android:color/transparent</item>
<!-- 是否浮现在activity之上 -->
<item name="android:windowIsFloating">true</item>
<!-- 半透明 -->
<item name="android:windowIsTranslucent">true</item>
<!-- 无标题 -->
<item name="android:windowNoTitle">true</item>
<!-- 背景透明 -->
<item name="android:windowBackground">@android:color/transparent</item>
</style>
五、启动验证流程
在需要对手机号验证时,调用JJCode.verify
启动验证,在启动验证之前,建议根据业务逻辑先对手机号的合法性进行校验。
JJCode.verify(activity, phone, new VerifyCallback() {
@Override
public void onSuccess(String mobile, String token) {
Log.e("JJCode", "验证成功,mobile:" + mobile + ",token:" + token);
Toast.makeText(MainActivity.this, "验证成功", Toast.LENGTH_LONG).show();
}
@Override
public void onFailure(int code, String msg) {
Log.e("JJCode", "验证失败,err code:" + code + ",err msg:" + msg );
Toast.makeText(MainActivity.this, "验证失败:" + msg, Toast.LENGTH_LONG).show();
}
});
六、提交后端进行校验
由于客户端不是完全可信的环境,在第五步验证成功后,在注册或者登录提交数据时,需要将验证返回的mobile
和token
全部提交到后端,由后端调用我们提供的API
校验是否手机号已真实的校验通过。
七、控制台配置包名和签名信息
为了防止APP_ID
被非法冒用引起不必要的麻烦,强烈建议在我们控制台配置应用包名和签名信息,签名可以配置多个,以逗号分割。配置后包名或者签名信息不同均不能使用。