APP启动小程序

327 阅读3分钟

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>