监管部门要求在用户点击隐私协议弹框中“同意”按钮之前,App 不可以调用相关敏感API。为应对此监管要求,mPaaS Android 10.1.32.17 以上(32 版本) 和 10.1.60.5 以上(60 版本)的基线提供了支持,请您根据实际情况参考本文对工程进行改造。
新建隐私许可弹框回调类。
在代码中新建一个类,实现PrivacyListener
接口,类的实现可以参考以下代码:
public class MyPrivacyListener implements PrivacyListener {
// 在本方法内进行隐私许可弹框
@Override
public void showPrivacy(final Activity activity, final PrivacyResultCallback privacyResultCallback) {
if(null==privacyResultCallback){
return;
}
if(null!=activity){
new AlertDialog.Builder(activity)
.setTitle("隐私许可弹框")
.setMessage("主体内容")
.setPositiveButton("同意继续使用", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
// 点击确定后,取消弹框
dialogInterface.cancel();
// 将弹框结果设置为 true
privacyResultCallback.onResult(true);
}
})
.setNegativeButton("不同意并退出", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
// 点击不同意后,取消弹框
dialogInterface.cancel();
// 将弹框结果设置为 false
privacyResultCallback.onResult(false);
// 结束掉当前的 activity,框架会杀掉进程
if(null!=activity){
activity.finish();
}
}
})
.setCancelable(false)
.create()
.show();
}else{
// 如果 activity 是空的话,回调结果设置 false
privacyResultCallback.onResult(false);
}
}
}
windowFocusChange
,触发后框架才会进行后续的操作。Resources resource = QuinoxAgent.getInstance().getResourcesByBundle("资源所在的bundle的bundlename");
/build/intermediates/bundle/META-INF/BUNDLE.MF
中查看。res_slinks
文件,并将您的资源所在的 bundle 的 group
和 artifact
按照规则写到 res_slinks
文件内。规则为 group-artifact.split("-")[0]
。如果组合后内容过长需要换行,请您注意进行换行处理group = com.mpaas.demo.materialdesign
artifact = materialdesign-build
,com.mpaas.demo.materialdesign-materialdesign
。 LayoutInflator.inflate(R.layout.xxx)
来调用资源。在 AndroidManifest 中注册弹框回调类。
在portal
的AndroidManifest
中注册隐私许可弹框回调类,value
是刚才实现的隐私许可弹框回调类的全路径。代码如下所示。注意将全路径及类名要替换成您自己的回调类。
<!--隐私许可弹框回调-->
<meta-data
android:name="privacy.listener"
android:value="com.mpaas.demo.launcher.MyPrivacyListener" />
在启动时弹框。
在MockLauncherApplicationAgent
的preInit
中,加入启动弹框拦截。代码如下所示:
//检测是否要向用户进行隐私许可弹框
if(!PrivacyUtil.isUserAgreed(getApplicationContext())){
PermissionGate.getInstance().waitForUserConform(mContext, getMicroApplicationContext());
}
启动第一个 Activity。
在MockLauncherActivityAgent
的postInit
中,进行第一个Activity
的跳转。代码如下所示:
// 判断是否获取了用户隐私许可
if(PrivacyUtil.isUserAgreed(activity)){
new Handler().postDelayed(new Runnable() {
public void run() {
Intent intent = new Intent(activity, MainActivity.class);
activity.startActivity(intent);
activity.finish();
}
}, 200);
}
在文档使用中是否遇到以下问题
更多建议
匿名提交