日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

隱私權限彈框的使用說明

監管部門要求在用戶點擊隱私協議彈框中 同意 按鈕之前,App 不可以調用相關敏感 API。為應對此監管要求,mPaaS Android 10.1.32.17 以上(32 版本) 和 10.1.60.5 以上(60 版本)的基線提供了支持。如果您采用的是組件化的接入方法,請您根據實際情況參考本文對工程進行改造。

使用方法

重要

彈出隱私彈框的 Activity 不可以繼承 mPaaS 的 BaseActivity,因為 BaseActivity 會進行埋點數據采集,會導致 App 在同意隱私政策之前采集隱私數據。

  1. 新建隱私許可彈框回調類。在代碼中新建一個類,實現 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);
         }
     }
    }
    說明

    如果您使用的是 10.1.68.42 及以上版本基線且需要清除隱私狀態,請實現 PrivacyListener2 接口,并實現 shouldClear 函數。

    以下代碼是對 shouldClear 函數的說明:

    @Override
    public boolean shouldClear(Context context) {
      //用戶沒有點同意隱私協議默認用 SharedPreferences 存儲 false 設置為 return false。如果需要再次彈窗需 SP 存儲 true 設置為return true;
      return false;//return 的值取 SP 里面存的 boolean 值。
    }

    回調時,一定要彈出一個對話框來觸發 windowFocusChange,觸發后框架才會進行后續的操作。由于該回調類會由系統框架進行反射初始化,且時機非常早,因此請不要添加帶方法名的構造函數,以及在構造函數中加入具體邏輯。

    如果您需要在彈出對話框這里使用資源,在不同基線下需要采用不同的方法。

    • 在 32 基線下,您需要采用如下方法:Resources resource = QuinoxAgent.getInstance().getResourcesByBundle("資源所在的bundle的bundlename");

      說明

      bundlename 可在 Bundle 工程中的主 module 中的 /build/intermediates/bundle/META-INF/BUNDLE.MF 中查看。

      bundlename
    • 在 60 基線下,您需要在 Portal 工程的主 module 下,建立 res_slinks 文件,并將您的資源所在的 bundle 的 groupartifact 按照規則寫到 res_slinks 文件內。規則為 group-artifact.split("-")[0]。如果組合后內容過長需要換行,請您注意進行換行處理。例如:group = com.mpaas.demo.materialdesignartifact = materialdesign-build,最終寫入 res_slinks 文件中的配置是 com.mpaas.demo.materialdesign-materialdesign1

      完成以上內容后,您可以直接使用 LayoutInflator.inflate(R.layout.xxx) 來調用資源。

  2. AndroidManifest 中注冊彈框回調類。在 portalAndroidManifest 中注冊隱私許可彈框回調類,value 是剛才實現的隱私許可彈框回調類的全路徑。代碼如下所示。注意將全路徑及類名要替換成您自己的回調類。

    <!--隱私許可彈框回調-->
    <meta-data
     android:name="privacy.listener"
     android:value="com.mpaas.demo.launcher.MyPrivacyListener" />
  3. 啟動彈框攔截。在 MockLauncherApplicationAgentpreInit 中,加入啟動彈框攔截。代碼如下所示:

    //檢測是否要向用戶進行隱私許可彈框
    if(!PrivacyUtil.isUserAgreed(getApplicationContext())){
     PermissionGate.getInstance().waitForUserConform(mContext, getMicroApplicationContext());
    }
  4. 啟動第一個 Activity。在 MockLauncherActivityAgentpostInit 中,進行第一個 Activity 的跳轉。代碼如下所示:

    public class MockLauncherActivityAgent extends LauncherActivityAgent {
        
        private Handler mUIHandler = new Handler(Looper.getMainLooper());
        
        @Override
        public void preInit(Activity activity) {
            super.preInit(activity);
        }
    
        @Override
        public void postInit(final Activity activity) {
            super.postInit(activity);
    
            if (PrivacyUtil.isUserAgreed(activity)) {
                mUIHandler.postDelayed(new Runnable() {
                    public void run() {
                        Intent intent = new Intent(activity, MainActivity.class);
                        activity.startActivity(intent);
                        activity.finish();
                    }
                }, 1000);
            } else {
    
                PermissionGate.getInstance().registerPrivacyCallback(
                        new PrivacyCallback() {
                            @Override
                            public void onTermsOfUseAgreed() {
                                mUIHandler.postDelayed(new Runnable() {
                                    public void run() {
                                        Intent intent = new Intent(activity, MainActivity.class);
                                        activity.startActivity(intent);
                                        activity.finish();
                                    }
                                }, 1000);
                            }
                        }
                );
            }
        }
    
    }