如何使用解析,以避免安装重复?如何使用、以避免

2023-09-07 12:09:55 作者:曾经的我好傻

我注意到,每次我部署我的应用程序到我的手机时,它复制了安装在解析收到推送通知。如何避免这种情况的发生,每当我重新安装应用程序?

I've noticed that every time I've deployed my app to my phone,it duplicates the installation in parse to receive push notifications. How can I avoid this from happening whenever I reinstall the app?

推荐答案

一个星期的调查后,并尝试和错误,我终于找到一个可行的解决方案。基本上,你需要做两件事情来实现这一点:

After a week of research and try and error, I finally found a working solution. Basically, you need to do two things to achieve this:

在Android应用:通过一些独特的ID,当你初始化并保存 ParseInstallation 。我们将使用 ANDROID_ID 。 在解析云code:在你保存一个新的安装,检查是否在一个旧其唯一的ID存在安装。如果是这样,删除旧的。 In your Android app: pass some unique ID when you initialize and save the ParseInstallation. we will use ANDROID_ID. In Parse Cloud Code: Before you save a new Installation, check to see if its unique ID exist in an old Installation. If it does, delete the old one.

如何做到这一点:

在你的应用程序的的onCreate()方法:

//First: get the ANDROID_ID
String android_id = Settings.Secure.getString(this.getContentResolver(), Settings.Secure.ANDROID_ID);
Parse.initialize(this, "APP_ID", "CLIENT_KEY");
//Now: add ANDROID_ID value to your Installation before saving.
ParseInstallation.getCurrentInstallation().put("androidId", android_id);
ParseInstallation.getCurrentInstallation().saveInBackground();

在你的云code,补充一点:

江苏双重预防建设背景及基本概念

In your cloud code, add this:

Parse.Cloud.beforeSave(Parse.Installation, function(request, response) {
    Parse.Cloud.useMasterKey();
    var androidId = request.object.get("androidId");
    if (androidId == null || androidId == "") {
        console.warn("No androidId found, save and exit");
        response.success();
    }
    var query = new Parse.Query(Parse.Installation);
    query.equalTo("androidId", androidId);
    query.addAscending("createdAt");
    query.find().then(function(results) {
        for (var i = 0; i < results.length; ++i) {
            console.warn("iterating over Installations with androidId= "+ androidId);
            if (results[i].get("installationId") != request.object.get("installationId")) {
                console.warn("Installation["+i+"] and the request have different installationId values. Try to delete. [installationId:" + results[i].get("installationId") + "]");
                results[i].destroy().then(function() {
                    console.warn("Installation["+i+"] has been deleted");
                },
                function() {
                    console.warn("Error: Installation["+i+"] could not be deleted");
                });
            } else {
                console.warn("Installation["+i+"] and the request has the same installationId value. Ignore. [installationId:" + results[i].get("installationId") + "]");
            }
        }
        console.warn("Finished iterating over Installations. A new Installation will be saved now...");
        response.success();
    },
    function(error) {
        response.error("Error: Can't query for Installation objects.");
    });
});

这就是它!

东西,你可能想知道:

在没有的完美的独特的Andr​​oid设备标识符。就我而言,我使用 ANDROID_ID 。您可以使用别的东西。 阅读这个官方文章,以获得更好的图片。 请注意,调用把(androidId,android_id)后; 首次,名为新列 androidId 将被添加到您的安装在分析应用程序仪表板表视图。 There is no perfect unique identifier for Android devices. In my case, I used ANDROID_ID. You might use something else. Read this official article to get a better picture. Note that after calling put("androidId", android_id); for the first time, a new column named androidId will be added to your Installation table view in the Parse App Dashboard.

资源: 1 ],[ 2 ],[ 3 ]

Resources: [1], [2], [3]