2015-05-26 5 views
5

Ich benutze Parse, um Push-Benachrichtigung zu behandeln. Da ich bereits eine eigene Datenbank habe, verwende ich parse, um nur die Installationsdaten zu speichern (ohne ParseUser zum Anmelden und Abmelden in der App) Wenn ich meine App auslogge, möchte ich meine Installation löschen. Android kann Pars Installation nicht löschen

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); 
     } 
    } 
}); 

Dann bekam ich folgende Fehlermeldung:

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) 

Dank!

+0

Ich bin nicht in der Lage zu verstehen, was Sie erreichen wollen. Die Installationsklasse dient namentlich dazu, die Installationen Ihrer App zu speichern. Fortfahren ... Jedes Mal, wenn Sie initialize (key1, key2) zum ersten Mal aufrufen, wird ein neues Installationsobjekt erstellt. – Aashir

+0

Ich möchte den Installationsdatensatz löschen, der in Parse gespeichert wird. Damit der Benutzer keine Push-Benachrichtigungen erhält. – Lilian

+0

Für Push-Benachrichtigungen? Hast du die Benutzer abonniert, die bei einem Kanal angemeldet sind? – Aashir

Antwort

1

Ich denke, Sie versuchen, eine Anfrage mit einem Benutzer zu stellen, der nicht genug Autorisierung hat, es zu tun. Vielleicht machst du diese Anfrage, wenn die Sitzung bereits zerstört wurde (zum Abmelden), anstatt es zu tun, bevor du sie zerstörst.

1

Sie müssen es mit Hauptschlüssel aus dem Cloud Code löschen.

im Android-Client:

   //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(); 
        } 
       } 
      }); 

Und dann in der Cloud-Code:

  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"); 
       }); 
     }); 

    }); 

Und wenn Sie möchten auch die Cache-Installation auf Ihrem Gerät löschen, gehen Sie wie folgt vor:

  1. Erstellen Sie ein Paket namens com.parse

  2. Kiste eine Klasse, wie zum Beispiel MyParseTools.

  3. Erstellen Sie eine statische Methode liks so:

    public static void clearParseInstallation() { 
    ParseInstallation.getCurrentInstallationController().clearFromDisk(); 
    ParseInstallation.getCurrentInstallationController().clearFromMemory();} 
    
Verwandte Themen