2015-05-26 32 views
5

Io uso parse per gestire la notifica push. Poiché ho già il mio database, utilizzo parse per archiviare solo i dati di installazione. (Non si utilizza ParseUser per accedere e disconnettersi nell'app) Quando si disconnette la mia app, vorrei eliminare la mia installazione.Android non può eliminare l'analisi parsing

ParseInstallation installation = ParseInstallation.getCurrentInstallation(); 
installation.deleteInBackground(new DeleteCallback() { 
    @Override 
    public void done(ParseException ex) { 
     Log.d(TAG, "ParseInstallation deleteInBackground done"); 
     if (ex != null) { 
      Log.e(TAG, "ParseInstallation deleteInBackground", ex); 
     } 
    } 
}); 

poi ho ricevuto il seguente errore:

com.parse.ParseRequest$ParseRequestException: forbidden 
     at com.parse.ParseRequest.newPermanentException(ParseRequest.java:391) 
     at com.parse.ParseRESTCommand.onResponse(ParseRESTCommand.java:197) 
     at com.parse.ParseRequest$3.then(ParseRequest.java:258) 
     at com.parse.ParseRequest$3.then(ParseRequest.java:254) 
     at bolts.Task$14.run(Task.java:796) 
     at bolts.BoltsExecutors$ImmediateExecutor.execute(BoltsExecutors.java:105) 
     at bolts.Task.completeAfterTask(Task.java:787) 
     at bolts.Task.continueWithTask(Task.java:599) 
     at bolts.Task.continueWithTask(Task.java:610) 
     at bolts.Task$12.then(Task.java:702) 
     at bolts.Task$12.then(Task.java:690) 
     at bolts.Task$14.run(Task.java:796) 
     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080) 
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573) 
     at java.lang.Thread.run(Thread.java:841) 

Grazie!

+0

non riesco a capire che cosa si sta cercando di raggiungere. La classe di installazione, come per nome, è pensata per memorizzare le installazioni della tua app. Continuando ... un nuovo oggetto di installazione viene creato ogni volta che si chiama initialise (key1, key2) per la prima volta. – Aashir

+0

Vorrei eliminare il record di installazione che viene archiviato in analisi. In modo che l'utente non riceverà alcuna notifica push. – Lilian

+0

Per le notifiche push? Ti sei iscritto agli utenti che hanno effettuato l'accesso a un canale? – Aashir

risposta

1

Penso che stiate provando a fare una richiesta con un utente che non ha abbastanza autorizzazione per farlo. Forse, stai facendo questa richiesta quando la sessione è già distrutta (per il logout), invece di farlo prima di distruggerla.

1

È necessario eliminarlo dal codice cloud utilizzando la chiave principale.

Nel client Android:

   //clear the installation backend 
      HashMap<String, String> params = new HashMap<>(); 
      String idToken = ParseInstallation.getCurrentInstallation().getInstallationId(); 
      params.put("installationId", idToken); 
      ParseCloud.callFunctionInBackground("removeInstallation", params, new FunctionCallback<String>() { 
       @Override 
       public void done(String response, ParseException e) { 
        if (e == null) { 
         //clear the local chache 
         ParseEasyAccess.clearParse(); 
        } else { 
         e.printStackTrace(); 
        } 
       } 
      }); 

E poi nel Codice Cloud:

  Parse.Cloud.define("removeInstallation", function(request, response) { 

     Parse.Cloud.useMasterKey(); 

     var installationId = request.params.installationId; 

     var query = new Parse.Query(Parse.Installation); 
     query.equalTo("installationId", installationId); 

     query.find(function(installations) { 
      installations[0].destroy().then(
       function() { 
        response.success("Destroyed"); 
       }, 
       function() { 
        response.error("Failed"); 
       }); 
     }); 

    }); 

E se si desidera eliminare anche l'installazione nella cache sul dispositivo, effettuare le seguenti operazioni:

  1. Creare un pacchetto denominato com.parse

  2. Crate una classe, ad esempio MyParseTools.

  3. Fai un metodo statico liks così:

    public static void clearParseInstallation() { 
    ParseInstallation.getCurrentInstallationController().clearFromDisk(); 
    ParseInstallation.getCurrentInstallationController().clearFromMemory();} 
    
Problemi correlati