APP启动小程序
先需要到微信开放平台上注册,申请APPid等.紧接着安卓文档进行一些相关的配置等.微信开放平台文档-Android
在注册了APPID的情况下,四步即可实现APP跳转小程序
第一步
Android Studio环境下:
在build.gradle文件中,添加如下依赖即可:
dependencies {
api 'com.tencent.mm.opensdk:wechat-sdk-android-with-mta:+'
}
或者
dependencies {
api'com.tencent.mm.opensdk:wechat-sdk-android-without-mta:+'
}
(其中,前者包含统计功能)不需要统计的添加第二个即可
第二步
注册到微信,我一般都在application的oncreate里面注册
// APP_ID 替换为你的应用从官方网站申请到的合法appID
private static final String APP_ID = "wx88888888";
// IWXAPI 是第三方app和微信通信的openApi接口
private IWXAPI api;
private regToWx() {
// 通过WXAPIFactory工厂,获取IWXAPI的实例
api = WXAPIFactory.createWXAPI(this, APP_ID, true);
// 将应用的appId注册到微信
api.registerApp(APP_ID);
}
第三步
AndroidManifest.xml 设置
申请权限
<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.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
注册接收微信的请求及返回值的activity
在你的包名相应目录下新建一个wxapi目录,并在该wxapi目录下新增一个WXEntryActivity类,该类继承自Activity
比如我的包名的目录是com.xxx.xxx,那么我就在这个目录下再建一个目录,名字为wxapi,然后建一个类,为WXEntryActivity.该类继承自Activity.
先在manifest文件里面注册这个activity,例如:
<activity
android:name=".wxapi.WXEntryActivity"
android:label="@string/app_name"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:exported="true"
android:taskAffinity="net.sourceforge.simcpux"
android:launchMode="singleTask">
</activity>
这里主要注意的是,一定要加上这几句代码
android:exported="true"
android:taskAffinity="你的应用包名"
android:launchMode="singleTask"
否则APP拉起小程序的时候,由小程序添加按钮返回APP的时候,会回不去APP,由APP跳转到小程序的界面会不可见
完整的WXEntryActivity 示例:
public class WXEntryActivity extends Activity implements IWXAPIEventHandler {
/**
* IWXAPI 是第三方app和微信通信的openapi接口
*/
private IWXAPI api;
@Override
protected void onCreate(Bundle bundle) {
super.onCreate(bundle);
// 通过WXAPIFactory工厂,获取IWXAPI的实例
api = WXAPIFactory.createWXAPI(this, "你的appid", false);
//注意:
//第三方开发者如果使用透明界面来实现WXEntryActivity,需要判断handleIntent的返回值,如果返回值为false,则说明入参不合法未被SDK处理,
// 应finish当前透明界面,避免外部通过传递非法参数的Intent导致停留在透明界面,引起用户的疑惑
try {
Log.i(TAG, "--------handleIntent--------" + api.handleIntent(getIntent(), this));
if (!api.handleIntent(getIntent(), this)) {
finish();
}
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
setIntent(intent);
api.handleIntent(intent, this);
}
/**
* 微信发送请求到第三方应用时,会回调到该方法
*
* @param req
*/
@Override
public void onReq(BaseReq req) {
}
@Override
public void onResp(BaseResp baseResp) {
//跳转小程序
if (baseResp.getType() == ConstantsAPI.COMMAND_LAUNCH_WX_MINIPROGRAM) {
WXLaunchMiniProgram.Resp launchMiniProResp = (WXLaunchMiniProgram.Resp) baseResp;
//对应小程序组件 <button open-type="launchApp"> 中的 app-parameter 属性
String extraData = launchMiniProResp.extMsg;
Log.i(TAG, "onResp: " + extraData);
WXEntryActivity.this.finish();
}
}
private static final String TAG = "WXEntryActivity";
}
在这个WXEntryActivity 中,分享,跳转小程序等的回调都会在这里
第四步
跳转小程序
IWXAPI api = WXAPIFactory.createWXAPI(context, OnekeyShare.app_id);
WXLaunchMiniProgram.Req req = new WXLaunchMiniProgram.Req();
// 填小程序原始id
req.userName = "gh_a5c4e3d0ac6b";
//拉起小程序页面的可带参路径,不填默认拉起小程序首页
if (!TextUtils.isEmpty(path)) {
req.path = path;
}
// 可选打开 开发版,体验版和正式版
if (BuildConfig.DEBUG) {
req.miniprogramType = WXLaunchMiniProgram.Req.MINIPROGRAM_TYPE_TEST;
} else {
req.miniprogramType = WXLaunchMiniProgram.Req.MINIPTOGRAM_TYPE_RELEASE;
}
api.sendReq(req);
小程序跳转回APP,则需要小程序的开发人员编写.据官方介绍,也就是添加一个按钮,设置一下.
代码示例:
<button open-type="launchApp" app-parameter="wechat" binderror="launchAppError">打开APP</button>