Last active
November 25, 2019 14:36
-
-
Save mbmc/ebe5b65bc4eb86904c78 to your computer and use it in GitHub Desktop.
Delete Parse duplicated Installation object for Android app
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Context: | |
When you install an app on Android, it creates an entry (Installation) in the database. | |
If you uninstall the app, then re-install it, another entry is created. If you subscribe to a channel, you'll get 2 push notifications. | |
On iOS, this problem doesn't exist, and with UrbanAirship, there's no problem either. | |
Solution: | |
The idea is to remove all the entries that matches a "unique Id" created for each device. | |
Gist based on [this post](https://www.parse.com/questions/check-for-duplicate-installations-of-same-user-on-re-installation-of-app) | |
I chose to use the Wifi mac address as unique key, because based on [that post](http://stackoverflow.com/questions/2785485/is-there-a-unique-android-device-id), | |
there's no good way to get a unique Id. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Android app | |
private void setupParse(Context context) { | |
Parse.initialize(this, <PARSE_APP_ID>, <PARSE_CLIENT_KEY>); | |
ParseInstallation.getCurrentInstallation().put("uniqueId", getWifiMacAddress(context)); | |
ParseInstallation.getCurrentInstallation().saveInBackground(); | |
} | |
private String getWifiMacAddress(Context context) { | |
WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); | |
if (wifiManager != null && wifiManager.getConnectionInfo() != null) { | |
return wifiManager.getConnectionInfo().getMacAddress(); | |
} | |
return ""; | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Parse CloudCode | |
Parse.Cloud.beforeSave(Parse.Installation, function(request, response) { | |
Parse.Cloud.useMasterKey(); | |
var uniqueId = request.object.get("uniqueId"); | |
if (uniqueId == null || uniqueId == "") { | |
console.warn("No uniqueId found, exit"); | |
response.success(); | |
} | |
var query = new Parse.Query(Parse.Installation); | |
query.equalTo("uniqueId", uniqueId); | |
query.addAscending("createdAt"); | |
query.find().then(function(results) { | |
for (var i = 0; i < results.length; ++i) { | |
if (results[i].get("installationId") != request.object.get("installationId")) { | |
console.warn("App id " + results[i].get("installationId") + ", delete!"); | |
results[i].destroy().then(function() { | |
console.warn("Delete success"); | |
}, | |
function() { | |
console.warn("Delete error"); | |
} | |
); | |
} else { | |
console.warn("Current App id " + results[i].get("installationId") + ", dont delete"); | |
} | |
} | |
response.success(); | |
}, | |
function(error) { | |
response.error("Can't find Installation objects"); | |
} | |
); | |
}); | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment