2015-05-26 10 views
5

Używam parse do obsługi powiadomień push. Ponieważ mam już własną bazę danych, używam parse do przechowywania tylko danych instalacji. (Nie używanie ParseUser do logowania i wylogowania w aplikacji) Po wylogowaniu się z mojej aplikacji chciałbym usunąć moją instalację.Android nie może usunąć instalacji parse

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

Wtedy mam następujący błąd:

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) 

Dzięki!

+0

jestem w stanie zrozumieć, co próbujesz osiągnąć. Klasa instalacji, jak po nazwie, służy do przechowywania instalacji aplikacji. Kontynuacja ... nowy obiekt instalacyjny jest tworzony za każdym razem, gdy po raz pierwszy wywoływana jest inicjalizacja (klucz1, klucz2). – Aashir

+0

Chciałbym usunąć rekord instalacji, który jest przechowywany w analizie składni. Aby użytkownik nie otrzymał żadnych powiadomień push. – Lilian

+0

Dla powiadomień push? Czy zasubskrybowałeś użytkowników zalogowanych na kanale? – Aashir

Odpowiedz

1

Myślę, że próbujesz złożyć wniosek u użytkownika, który nie ma wystarczającej ilości uprawnień do wykonania tej czynności. Być może robisz to, gdy sesja jest już zniszczona (do wylogowania), zamiast robić to przed zniszczeniem.

1

Musisz usunąć go z Cloud Code za pomocą klucza głównego.

W android klient:

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

a następnie w Kodeksie 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"); 
       }); 
     }); 

    }); 

A jeśli chcesz również usunąć z pamięci podręcznej instalacji na urządzeniu, wykonaj następujące czynności:

  1. Utwórz pakiet o nazwie com.parse

  2. Złóż klasę, na przykład na przykład MyParseTools.

  3. Bądź statyczną metodą liks tak:

    public static void clearParseInstallation() { 
    ParseInstallation.getCurrentInstallationController().clearFromDisk(); 
    ParseInstallation.getCurrentInstallationController().clearFromMemory();} 
    
Powiązane problemy