L'app concorrente blocca la nostra app, ha bisogno di un modo per aggirare il check [chiuso]

6

Abbiamo un'app per taxi che ha avuto un discreto successo in Europa. Ma recentemente uno dei nostri concorrenti ha iniziato a controllare se la nostra app è installata e, in caso affermativo, la sua non verrà eseguita finché l'utente non disinstallerà la nostra app dal proprio telefono.

Inizialmente abbiamo fatto alcuni aggiornamenti manuali con un nome di pacchetto diverso per ignorare il controllo, ma stanno utilizzando una scansione manuale, cioè:

  1. Ricevono un elenco di nomi di pacchetti installati dal telefono dell'utente
  2. La lista viene inviata ai loro server
  3. Qualcuno controlla i nomi e contrassegna il nome del pacchetto
  4. I flag
  5. vengono inviati alle loro app e ancora una volta siamo bloccati

Fanno non distribuire la loro app tramite Play Store in modo che non possiamo presentare un reclamo su di loro a Google. C'è qualche altra possibilità per aggirare questo controllo? ad esempio rinominare il nome del pacchetto in fase di runtime? Al momento stiamo perdendo utenti poiché il concorrente ha più ordini (clienti) per i propri driver e la maggior parte dei nostri utenti disinstallerebbe la nostra app per poterli utilizzare.

UPDATE: Deciso di decompilare la loro app e vedere cosa stanno facendo lì, ho sbagliato sulla loro strategia, hanno codificato la nostra azienda e il nome dell'applicazione nelle forbiddenApps preferenze. Di seguito è riportato il codice che stanno utilizzando, in particolare il metodo refineForbiddenSet() è dove la nostra app viene contrassegnata per quanto posso vedere.

public class ForbiddenAppHelper
{

    public ForbiddenAppHelper()
    {
    }

    public static void UninstallApp(Context context, String s)
    {
        context.startActivity(new Intent("android.intent.action.DELETE", Uri.fromParts("package", s, null)));
    }

    public static boolean forbiddenAppsExist(Context context, String s)
    {
        return getForbidden(context, s).size() != 0;
    }

    public static Drawable getAppIcon(Context context, String s)
    {
        PackageManager packagemanager = context.getPackageManager();
        Drawable drawable;
        try
        {
            drawable = packagemanager.getApplicationIcon(s);
        }
        catch (android.content.pm.PackageManager.NameNotFoundException namenotfoundexception)
        {
            namenotfoundexception.printStackTrace();
            return null;
        }
        return drawable;
    }

    public static String getAppName(Context context, PackageManager packagemanager, String s)
    {
        if (packagemanager == null)
        {
            packagemanager = context.getPackageManager();
        }
        ApplicationInfo applicationinfo1 = packagemanager.getApplicationInfo(s, 0);
        ApplicationInfo applicationinfo = applicationinfo1;
_L1:
        android.content.pm.PackageManager.NameNotFoundException namenotfoundexception;
        Object obj;
        if (applicationinfo != null)
        {
            obj = packagemanager.getApplicationLabel(applicationinfo);
        } else
        {
            obj = "(unknown)";
        }
        return (String)obj;
        namenotfoundexception;
        applicationinfo = null;
          goto _L1
    }

    public static ArrayList getApplicationList(Context context)
    {
        ArrayList arraylist = new ArrayList();
        PackageManager packagemanager = context.getPackageManager();
        List list = packagemanager.getInstalledPackages(0);
        int i = 0;
        do
        {
            if (i >= list.size())
            {
                return arraylist;
            }
            PackageInfo packageinfo = (PackageInfo)list.get(i);
            if (packageinfo.versionName != null)
            {
                String s = packageinfo.packageName;
                arraylist.add(new InstalledApplication(packageinfo.applicationInfo.loadLabel(packagemanager).toString(), s));
            }
            i++;
        } while (true);
    }

    private static ArrayList getForbidden(Context context, String s)
    {
        HashSet hashset;
        StringTokenizer stringtokenizer;
        ArrayList arraylist;
        hashset = new HashSet();
        stringtokenizer = new StringTokenizer(s, ";");
        arraylist = new ArrayList();
        arraylist = getApplicationList(context);
_L3:
        boolean flag = stringtokenizer.hasMoreTokens();
        if (flag) goto _L2; else goto _L1
_L1:
        return refineFobiddenSet(arraylist, hashset);
_L2:
        hashset.add(stringtokenizer.nextToken());
          goto _L3
        Exception exception;
        exception;
        Crashlytics.logException(exception);
          goto _L1
    }

    public static String[] getForbiddenApps(Context context, String s)
    {
        ArrayList arraylist = getForbidden(context, s);
        return (String[])arraylist.toArray(new String[arraylist.size()]);
    }

    private static ArrayList refineFobiddenSet(ArrayList arraylist, HashSet hashset)
    {
        ArrayList arraylist1 = new ArrayList();
        Iterator iterator = hashset.iterator();
        do
        {
            if (!iterator.hasNext())
            {
                return new ArrayList(new HashSet(arraylist1));
            }
            String s = (String)iterator.next();
            Iterator iterator1 = arraylist.iterator();
            while (iterator1.hasNext()) 
            {
                InstalledApplication installedapplication = (InstalledApplication)iterator1.next();
                if (installedapplication.name.equals(s) || installedapplication.pname.equals(s))
                {
                    arraylist1.add(installedapplication.pname);
                }
            }
        } while (true);
    }
}
    
posta ItsNotAboutTheName 22.10.2014 - 15:22
fonte

1 risposta

13

Direi che cercare di sconfiggere i tuoi avversari con mezzi tecnici è una cattiva idea.

Dalla tua descrizione, ciò che sta facendo il tuo concorrente sta fondamentalmente dicendo ai potenziali clienti: per usare il mio servizio, devi accettare di non usare il servizio del mio concorrente. Manda i tuoi avvocati; questa è la loro roba. Dipende ovviamente dalla giurisdizione, ma scommetto che nella maggior parte dei posti del mondo qualsiasi avvocato semi-competente dovrebbe essere in grado di denunciarli a morte.

    
risposta data 22.10.2014 - 16:17
fonte

Leggi altre domande sui tag