MiniInitConfig config = builder.verifyPkg(false) // Ignore the package name verification.build();





android {defaultConfig {javaCompileOptions {annotationProcessorOptions {// Configure module name: Define a unique name following Android class naming conventionsarguments = [tcmppModuleName: "Demo"]}}}}
@ProxyService(proxy = MiniConfigProxy.class)public class MiniConfigProxyImpl extends MiniConfigProxy {@Overridepublic MiniInitConfig buildConfig() {MiniInitConfig.Builder builder = new MiniInitConfig.Builder();// Register all defined modules; the registerModule parameter value should match the tcmppModuleName defined abovereturn builder



/*** Returns the buttons in the "More" panel. Each button must be assigned an ID, and the ID value should be an integer between 100 and 200.* Note: This method applies when called within the mini program process.* @param builder* @return*/public ArrayList<MoreItem> getMoreItems(MoreItemList.Builder builder){builder.addDebug("Debug", icon) // Set the Debug button on the control panelreturn builder.build();}


public class TCMPPDemoApplication extends Application@Overridepublic void onCreate() {super.onCreate();if (TmfMiniSDK.isMiniProcess(this)) {// Skip the third-party framework initialization in the mini program process}}}
public class TCMPPDemoApplication extends Application {@Overrideprotected void attachBaseContext(Context base) {super.attachBaseContext(base);sApp = this;// com.tencent.tmfmini.sdk.launcher.DFMWebViewCompat;DFMWebViewCompat.setDataDirectorySuffix(this);}}
<style name="MyMiniApp" parent="MiniApp"><!--Enable window preview using windowDisablePreview--><item name="android:windowDisablePreview">false</item><!--Set the preview background using windowBackground--><item name="android:windowBackground">#FF0000</item></style>
<activitytools:replace="android:theme"android:name="com.tencent.tmfmini.sdk.ui.MiniActivity1"android:theme="@style/MyMiniApp" /><activitytools:replace="android:theme"android:name="com.tencent.tmfmini.sdk.ui.MiniActivity2"android:theme="@style/MyMiniApp"/><activitytools:replace="android:theme"android:name="com.tencent.tmfmini.sdk.ui.MiniActivity3"android:theme="@style/MyMiniApp" /><activitytools:replace="android:theme"android:name="com.tencent.tmfmini.sdk.ui.MiniActivity4"android:theme="@style/MyMiniApp"/><activitytools:replace="android:theme"android:name="com.tencent.tmfmini.sdk.ui.MiniActivity5"android:theme="@style/MyMiniApp" /><activitytools:replace="android:theme"android:name="com.tencent.tmfmini.sdk.ui.MiniActivity6"android:theme="@style/MyMiniApp" />
@ProxyService(proxy = MiniConfigProxy.class)public class MiniConfigProxyImpl extends MiniConfigProxy {@Overridepublic MiniInitConfig buildConfig() {MiniInitConfig.Builder builder = new MiniInitConfig.Builder();return builder.configAssetName("tcsas-android-configuration.json").deviceUID(ModuleApplet.D_UID)// Set a custom device ID.build();}}
/*** Set account info** @param userId*/public static void setUserId(String userId)
TmfMiniSDK.setUserId("xxxxx");
public void startMiniApp(String appid) {// Create mini program launch parametersMiniStartOptions miniStartOptions = new MiniStartOptions();// Set the isSingleTask parameter to true to ensure the mini program runs in single-task modeminiStartOptions.isSingleTask = true;TmfMiniSDK.startMiniApp(activity, appid, MiniScene.LAUNCH_SCENE_SEARCH, MiniApp.TYPE_ONLINE, miniStartOptions);}
@JsEvent("mockPayment")public void mockPayment(final RequestEvent req) {Activity activity = mMiniAppContext.getAttachedActivity();if (activity.isFinishing()) {req.fail("app activity already finished");return;}try {//mock payment default test password 666666JSONObject mockPayData = mockPayData();PaymentManager.g().gotoPayPage(activity, mMiniAppContext, mockPayData, (res, data) -> {QMLog.d("mockPayment", "result: " + data + "; success: " + res);if (res) {req.ok(data);}else {req.fail("pay failed");}});} catch (JSONException e) {req.fail("create mock pay data failed");}}
public class PaymentManager {...//Enter the order payment pageprivate void gotoPayPage(Activity activity, IMiniAppContext miniAppContext, JSONObject checkRet, AsyncResult result) {activity.runOnUiThread(() -> {String fee = checkRet.optString("actualAmount");double paymentValue = Double.parseDouble(fee) / 10000;Intent intent = new Intent(activity, PaymentMethodActivity.class);intent.setAction(Intent.ACTION_VIEW);intent.putExtra("totalFee", paymentValue);intent.putExtra("rawData", checkRet.toString());activity.startActivity(intent);paymentRequest = new PaymentRequest(miniAppContext, checkRet, result, paymentValue);Log.e("TAG", "payment request " + this.hashCode());});}}
public class LoginDialogFragment extends DialogFragment {private String mMiniAppName;private AuthListener mAuthListener;//Used to set login authorization, listen for callbackspublic void setAuthListener(AuthListener authListener) {mAuthListener = authListener;}//...Initialize page and parameters@Nullable@Overridepublic View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {btnAgree.setOnClickListener(v -> {// Handle agree button click// Complete login and authorization operations, and return the usernameif (mAuthListener != null) {mAuthListener.onAuthCallback(true, "Super app user");}dismiss();});Button btnRefuse = dialog.findViewById(R.id.btn_refuse);btnRefuse.setOnClickListener(v -> {// Handle refuse button clickif (mAuthListener != null) {mAuthListener.onAuthCallback(false, null);}dismiss();});return dialog;}public interface AuthListener {void onAuthCallback(boolean isAuth, String userName);}}
@JsEvent("mockLogin")public void mockLogin(final RequestEvent req) {Activity activity = mMiniAppContext.getAttachedActivity();if (activity.isFinishing()) {req.fail("app activity already finished");return;}try {JSONObject jsonObject = new JSONObject(req.jsonParams).optJSONObject("data");if (jsonObject == null) {req.fail("ill params");return;}String miniAppName = jsonObject.optString("miniAppName");LoginDialogFragment loginDialogFragment = LoginDialogFragment.newInstance(miniAppName);loginDialogFragment.setAuthListener((isAuth, userName) -> {JSONObject result = new JSONObject();try {result.put("isAuth", isAuth);result.put("userName", userName);} catch (JSONException e) {req.fail("auth result illegal params");}req.ok(result);});loginDialogFragment.show(activity.getFragmentManager(), "login");} catch (JSONException e) {req.fail("illegal params");}}
@JsEvent("mockRunMainAppPage")public void mockRunMainAppPage(final RequestEvent req) {Activity activity = mMiniAppContext.getAttachedActivity();if (activity.isFinishing()) {req.fail("app activity already finished");return;}try {JSONObject params = new JSONObject(req.jsonParams);String data = params.optString("data");SameTaskStackActivity.start(activity, data, mMiniAppInfo.appId, mMiniAppInfo.verType);} catch (JSONException e) {req.fail("illegal params");return;}req.ok();}
public class SameTaskStackActivity extends BaseActivity {//...other params infopublic static void start(Activity activity, String data, String miniAppId, int verType) {Intent intent = new Intent(activity, SameTaskStackActivity.class);intent.putExtra(EXTRA_TITLE, data);intent.putExtra(EXTRA_MINI_APP_ID, miniAppId);intent.putExtra(EXTRA_VER_TYPE, verType);intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);activity.startActivity(intent);}@Overridepublic void onBackPressed() {super.onBackPressed();//Monitor the back event and use the backToMiniApp interface to return to the mini program page//The miniAppId and verType parameters can be obtained through the MiniAppInfo object in BaseJsPluginTmfMiniSDK.backToMiniApp(mMiniAppId, mVerType);}}
Feedback