Android, creare una EULA da accettare


In generale una EULA (o End-User License Agreement) è un accordo di licenza tra il fornitore di un programma software e l'utente finale. In senso lato può rappresentare una sorta di elenco di avvertenze o accettazioni che l'utente finale decide di validare prima di installare un software.

Anche in campo videoludico è possibile elencare delle avvertenze in modo che l'utente finale (in questo caso il giocatore che ha scaricato un'app) ne sia a conoscenza.

End User License Agreement


In questo post vedremo come integrare facilmente un documento di EULA in modo tale che l'utente finale se non accetta i termini elencati, non possa lanciare la nostra app.
Il nostro esempio si applica facilmente anche ad app o giochi già completati, non è necessario applicarlo ad un programma ancora da sviluppare.

Seguire i seguenti passi:

  1. Aprite il vostro progetto con Android Studio (oppure create un nuovo progetto)
  2. Create una nuova classe Eula.java all'interno del vostro package e incollate il sorgente che viene riportato in questo post
  3. All'interno del metodo onCreate() della Main Activity del progetto, aggiungere la chiamata al metodo Eula.show(this);

Sorgente


/*
 * Eula.java
 * Sviluppare Videogiochi
 * https://svilupparevideogiochi.blogspot.it
 *
 * Modalità:
 * Visualizza una EULA "End User License Agreement" che l'utente deve accettare prima di eseguire
 * per la prima volta l'applicazione associata.
 * Se l'utente accetta i termini, la eula non viene piu visualizzata nelle successive esecuzioni
 * Se l'utente non accetta i termini, l'app viene chiusa
 *
 * Utilizzo:
 * 1) creare una classe Eula.java con questo contenuto, mettendo a posto il package corretto
 * 2) all'interno del metodo "onCreate" dell'app principale, richiamare il metodo Eula.show(this);
 */

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.SharedPreferences;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;

class Eula {

    private static final String EULA_APP_VERSION = "app.version";
    private static final String EULA_PREFERENCE_NAME = "eula";
    private static final String EULA_PREFERENCE_ACCEPTED = "eula.accepted";
    protected static PackageInfo packageinfo = null;

    private static String testo = "End-User License Agreement for this game for Android\n"
            + "\nThis End-User License Agreement (EULA) is a legal agreement between you (either an "
            + " individual or a single entity) and the author of this Software for the software product "
            + " identified above, which includes computer software and may include associated media, "
            + "printed materials, and 'online' or electronic documentation (“SOFTWARE PRODUCT”)."
            + "\nBy installing, copying, or otherwise using the SOFTWARE PRODUCT, you agree to be "
            + "bounded by the terms of this EULA."
            + "\n\nIf you do not agree to the terms of this EULA, do not install or use the SOFTWARE PRODUCT."
            + "\n\nLIMITED WARRANTY\n"
            + "\nNO WARRANTIES.\n"
            + "\nThe Author of this Software expressly disclaims any warranty for the SOFTWARE "
            + "PRODUCT. The SOFTWARE PRODUCT and any related documentation is provided 'as is' "
            + "without warranty of any kind, either express or implied, including, without limitation, "
            + "the implied warranties or merchantability, fitness for a particular purpose, or "
            + "noninfringement. The entire risk arising out of use or performance of the SOFTWARE "
            + "PRODUCT remains with you."
            + "\n\nNO LIABILITY FOR DAMAGES.\n"
            + "\nIn no event shall the author of this Software be liable for any special, "
            + "consequential, incidental or indirect damages whatsoever (including, without "
            + "limitation, damages for loss of business profits, business interruption, loss of "
            + "business information, or any other pecuniary loss) arising out of the use of or "
            + "inability to use this product, even if the Author of this Software is aware of the "
            + "possibility of such damages and known defects.";

    public Eula() {
    }

    static private void getPackageInfo(final Activity activity) {
        try {
            packageinfo = activity.getPackageManager().getPackageInfo(activity.getPackageName(), PackageManager.GET_ACTIVITIES);
        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
        }
    }

    static interface OnEulaAgreedTo {
        void onEulaAgreedTo();
    }

    static boolean show(final Activity activity) {
        getPackageInfo(activity);
        final SharedPreferences preferences = activity.getSharedPreferences(EULA_PREFERENCE_NAME, Activity.MODE_PRIVATE);

        // Scommentare le seguente riga per mostrare la EULA ad ogni esecuzione dell'app
        // serve per testare il funzionamento
        // preferences.edit().putBoolean(EULA_PREFERENCE_ACCEPTED, false).commit();

        if (!preferences.getBoolean(EULA_PREFERENCE_ACCEPTED, false) || (!packageinfo.versionName.equalsIgnoreCase(preferences.getString(EULA_APP_VERSION, "")))) {
            final AlertDialog.Builder builder = new AlertDialog.Builder(activity);
            builder.setTitle("Licenza");
            builder.setCancelable(true);
            builder.setPositiveButton("Accept", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {
                    accept(preferences);
                    if (activity instanceof OnEulaAgreedTo) {
                        ((OnEulaAgreedTo) activity).onEulaAgreedTo();
                    }
                }
            });

            builder.setNegativeButton("Refuse", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {
                    refuse(preferences, activity);
                }
            });

            builder.setOnCancelListener(new DialogInterface.OnCancelListener() {
                public void onCancel(DialogInterface dialog) {
                    refuse(preferences, activity);
                }
            });

            builder.setMessage(testo);
            builder.create().show();
            return false;
        }
        return true;
    }

    private static void accept(SharedPreferences preferences) {
        preferences.edit().putBoolean(EULA_PREFERENCE_ACCEPTED, true).commit();
        preferences.edit().putString(EULA_APP_VERSION, packageinfo.versionName).commit();
    }

    private static void refuse(SharedPreferences preferences, Activity activity) {
        preferences.edit().putBoolean(EULA_PREFERENCE_ACCEPTED, false).commit();
        activity.finish();
    }
}

Screenshot risultante

EULA in azione su Android

Ovviamente siete liberi di utilizzare questo sorgente in qualsiasi progetto, potete modificarlo (o modificare il testo) a vostro piacimento senza restrizioni.

Se vi è stato utile, potete condividere il blog sul vostro social preferito. Grazie!

Commenti