我使用parse来处理推送通知。因为我已经拥有自己的数据库,所以我只使用parse存储安装数据。(不使用ParseUser登录并在应用程序中注销) 当我退出我的应用程序时,我想删除我的安装。
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);
}
}
});
然后我收到以下错误:
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)
谢谢!
答案 0 :(得分:1)
我认为您正在尝试向没有足够授权的用户提出请求。 也许,当会话已被销毁(用于注销)时,您正在执行此请求,而不是在销毁之前执行此操作。
答案 1 :(得分:1)
您必须使用主密钥从Cloud Code中删除它。
在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();
}
}
});
然后在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");
});
});
});
如果您还希望删除设备上的缓存安装,请执行以下操作:
创建名为com.parse的包
创建一个类,例如MyParseTools。
使静态方法如此:
public static void clearParseInstallation() {
ParseInstallation.getCurrentInstallationController().clearFromDisk();
ParseInstallation.getCurrentInstallationController().clearFromMemory();}