Todos os produtos
Search
Central de documentação

Mobile Platform as a Service:Uso de pop-ups de permissão de privacidade (Portal&Bundle)

Última atualização: Jun 28, 2026

Órgãos reguladores exigem que o aplicativo não invoque APIs sensíveis antes do clique em no botão Agree na caixa de diálogo do acordo de privacidade. Para atender a essa exigência, as baselines do mPaaS Android 10.1.32.17 ou posterior e 10.1.60.5 ou posterior oferecem suporte a esse comportamento. Consulte este tópico para modifique o projeto conforme sua necessidade.

Procedimento

Importante

A Activity que exibe a caixa de diálogo de privacidade não pode herdar da BaseActivity do mPaaS. A BaseActivity coleta dados incorporados, o que faria o App coletar dados privados antes da concordância com a política de privacidade.

  1. Crie uma classe de callback para a caixa de diálogo de permissão de privacidade. Implemente a interface PrivacyListener. Consulte o código abaixo para ver a implementação:

    public class MyPrivacyListener implements PrivacyListener {
     // Make a privacy permission dialog box in this method
     @Override
     public void showPrivacy(final Activity activity, final PrivacyResultCallback privacyResultCallback) {
         if(null==privacyResultCallback){
             return;
         }
         if(null!=activity){
             new AlertDialog.Builder(activity)
                     .setTitle("Privacy permission dialog box")
                     .setMessage("Main content")
                     .setPositiveButton("Agree to continue to use", new DialogInterface.OnClickListener() {
                         @Override
                         public void onClick(DialogInterface dialogInterface, int i) {
                             // After you click OK, cancel the dialog box
                             dialogInterface.cancel();
                             // Set the dialog box result to true
                             privacyResultCallback.onResult(true);
                         }
                     })
                     .setNegativeButton("Disagree and exit", new DialogInterface.OnClickListener() {
                         @Override
                         public void onClick(DialogInterface dialogInterface, int i) {
                             // After you click Disagree, cancel the dialog box
                             dialogInterface.cancel();
                             // Set the dialog box result to false
                             privacyResultCallback.onResult(false);
                             // End the current activity, the framework will kill the process
                             if(null!=activity){
                                 activity.finish();
                             }
                         }
                     })
                     .setCancelable(false)
                     .create()
                     .show();
         }else{
             // If the activity is empty, the callback result is set to false
             privacyResultCallback.onResult(false);
         }
     }
    }

    Se você usar a baseline 10.1.68.42 ou superior e precisar limpar o estado de privacidade, implemente a interface PrivacyListener2 e a função shouldClear.

    O código a seguir descreve a função shouldClear:

    @Override
    public boolean shouldClear(Context context) {
      //When the user does not agree to the privacy agreement, the default is to use SharedPreferences to store false and set it to return false. If you need to pop up the window again, you need to set the true stored in the SP to return true;
      return false;//The value of return is the boolean value stored in SP.
    }

    Durante o callback, use uma caixa de diálogo para acionar windowFocusChange. O framework executará as operações subsequentes após esse acionamento. Como o framework do sistema inicializa a classe de callback por reflexão e a agenda muito cedo, não adicione um construtor com nome de método nem inclua lógica específica nele. Caso precise utilizar recursos na caixa de diálogo, adote métodos diferentes dependendo da baseline.

    • Na baseline 32, utilize o seguinte método:

      Resources resource = QuinoxAgent.getInstance().getResourcesByBundle("bundlename of the Bundle where the resource is located");
      Nota

      Verifique o bundlename em /build/intermediates/bundle/META-INF/BUNDLE.MF no módulo principal do projeto do Bundle.

      bundlename

    • Na baseline 60, crie o arquivo res_slinks no módulo principal do projeto Portal. Escreva o group e o artifact do Bundle onde seus recursos estão localizados no arquivo res_slinks seguindo a regra group-artifact.split("-")[0]. Se o conteúdo for muito extenso, valide a correção ao adicionar uma nova linha. Exemplo:

      group = com.mpaas.demo.materialdesign`
      `artifact = materialdesign-build`

      A configuração final gravada no arquivo res_slinks é com.mpaas.demo.materialdesign-materialdesign. 1

      Após concluir as etapas anteriores, use LayoutInflator.inflate(R.layout.xxx) diretamente para chamar os recursos.

  2. Registre a classe de callback no AndroidManifest. Adicione o registro da classe de callback da caixa de diálogo de permissão de privacidade no AndroidManifest do portal. Defina value como o caminho completo da classe de callback implementada anteriormente. O código é mostrado a seguir. Substitua o caminho completo e o nome da classe pelos da sua própria classe de callback.

     <!--callback of privacy permission dialog box-->
     <meta-data
         android:name="privacy.listener"
         android:value="com.mpaas.demo.launcher.MyPrivacyListener" />
  3. Configure a interceptação do pop-up na inicialização. No método preInit do MockLauncherApplicationAgent, adicione a interceptação da caixa de diálogo conforme o código abaixo:

     //Check if you want to display a privacy permission dialog box to the user
     if(! PrivacyUtil.isUserAgreed(getApplicationContext())){
         PermissionGate.getInstance().waitForUserConform(mContext, getMicroApplicationContext());
     }
  4. Inicie a primeira Activity. No método postInit do MockLauncherActivityAgent, execute o primeiro salto para a Activity. O código é o seguinte:

     // Determine whether the user privacy permission has been obtained
     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);
     }