![JAR search and dependency download from the Maven repository](/logo.png)
io.rakam.api.Identify Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of android-sdk Show documentation
Show all versions of android-sdk Show documentation
SDK for integrating Android apps with Rakam analytics.
The newest version!
package io.rakam.api;
import android.text.TextUtils;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.HashSet;
import java.util.Set;
import static io.rakam.api.Constants.OP_UNSET;
/**
* Identify
* Identify objects are a wrapper for user property operations. Each method adds a user
* property operation to the Identify object, and returns the same Identify object, allowing
* you to chain multiple method calls together, for example:
* {@code Identify identify = new Identify().set("color", "green").add("karma", 1);}
*
* Note: if the same user property is used
* in multiple operations on a single Identify object, only the first operation on that
* property will be saved, and the rest will be ignored.
*
* After creating an Identify object and setting the desired operations, send it to Rakam
* servers by calling {@code Rakam.getInstance().identify(identify);} and pass in the object.
*
* @see
* Android SDK README for more information on the Identify API and user property operations.
*/
public class Identify
{
/**
* The class identifier tag used in logging. TAG = {@code "io.rakam.api.Identify";}
*/
public static final String TAG = "io.rakam.api.Identify";
/**
* Internal {@code JSONObject} to hold all of the user property operations.
*/
protected JSONObject userPropertiesOperations = new JSONObject();
/**
* Internal set to keep track of user property keys and test for duplicates.
*/
protected Set userProperties = new HashSet();
/**
* Sets a user property value only once. Subsequent @{code setOnce} operations on that user
* property will be ignored.
*
* @param property the user property to setOnce
* @param value the value of the user property
* @return the same Identify object
*/
public Identify setOnce(String property, boolean value) {
addToUserProperties(Constants.AMP_OP_SET_ONCE, property, value);
return this;
}
/**
* Sets a user property value only once. Subsequent @{code setOnce} operations on that user
* property will be ignored.
*
* @param property the user property to setOnce
* @param value the value of the user property
* @return the same Identify object
*/
public Identify setOnce(String property, double value) {
addToUserProperties(Constants.AMP_OP_SET_ONCE, property, value);
return this;
}
/**
* Sets a user property value only once. Subsequent @{code setOnce} operations on that user
* property will be ignored.
*
* @param property the user property to setOnce
* @param value the value of the user property
* @return the same Identify object
*/
public Identify setOnce(String property, float value) {
addToUserProperties(Constants.AMP_OP_SET_ONCE, property, value);
return this;
}
/**
* Sets a user property value only once. Subsequent @{code setOnce} operations on that user
* property will be ignored.
*
* @param property the user property to setOnce
* @param value the value of the user property
* @return the same Identify object
*/
public Identify setOnce(String property, int value) {
addToUserProperties(Constants.AMP_OP_SET_ONCE, property, value);
return this;
}
/**
* Sets a user property value only once. Subsequent @{code setOnce} operations on that user
* property will be ignored.
*
* @param property the user property to setOnce
* @param value the value of the user property
* @return the same Identify object
*/
public Identify setOnce(String property, long value) {
addToUserProperties(Constants.AMP_OP_SET_ONCE, property, value);
return this;
}
/**
* Sets a user property value only once. Subsequent @{code setOnce} operations on that user
* property will be ignored.
*
* @param property the user property to setOnce
* @param value the value of the user property
* @return the same Identify object
*/
public Identify setOnce(String property, String value) {
addToUserProperties(Constants.AMP_OP_SET_ONCE, property, value);
return this;
}
/**
* Sets a user property value only once. Subsequent @{code setOnce} operations on that user
* property will be ignored.
*
* @param property the user property to setOnce
* @param values the value of the user property
* @return the same Identify object
*/
public Identify setOnce(String property, JSONArray values) {
addToUserProperties(Constants.AMP_OP_SET_ONCE, property, values);
return this;
}
/**
* Sets a user property value only once. Subsequent @{code setOnce} operations on that user
* property will be ignored.
*
* @param property the user property to setOnce
* @param values the value of the user property
* @return the same Identify object
*/
public Identify setOnce(String property, JSONObject values) {
addToUserProperties(Constants.AMP_OP_SET_ONCE, property, values);
return this;
}
/**
* Sets a user property value only once. Subsequent @{code setOnce} operations on that user
* property will be ignored.
*
* @param property the user property to setOnce
* @param values the value of the user property
* @return the same Identify object
*/
public Identify setOnce(String property, boolean[] values) {
addToUserProperties(Constants.AMP_OP_SET_ONCE, property, booleanArrayToJSONArray(values));
return this;
}
/**
* Sets a user property value only once. Subsequent @{code setOnce} operations on that user
* property will be ignored.
*
* @param property the user property to setOnce
* @param values the value of the user property
* @return the same Identify object
*/
public Identify setOnce(String property, double[] values) {
addToUserProperties(Constants.AMP_OP_SET_ONCE, property, doubleArrayToJSONArray(values));
return this;
}
/**
* Sets a user property value only once. Subsequent @{code setOnce} operations on that user
* property will be ignored.
*
* @param property the user property to setOnce
* @param values the value of the user property
* @return the same Identify object
*/
public Identify setOnce(String property, float[] values) {
addToUserProperties(Constants.AMP_OP_SET_ONCE, property, floatArrayToJSONArray(values));
return this;
}
/**
* Sets a user property value only once. Subsequent @{code setOnce} operations on that user
* property will be ignored.
*
* @param property the user property to setOnce
* @param values the value of the user property
* @return the same Identify object
*/
public Identify setOnce(String property, int[] values) {
addToUserProperties(Constants.AMP_OP_SET_ONCE, property, intArrayToJSONArray(values));
return this;
}
/**
* Sets a user property value only once. Subsequent @{code setOnce} operations on that user
* property will be ignored.
*
* @param property the user property to setOnce
* @param values the value of the user property
* @return the same Identify object
*/
public Identify setOnce(String property, long[] values) {
addToUserProperties(Constants.AMP_OP_SET_ONCE, property, longArrayToJSONArray(values));
return this;
}
/**
* Sets a user property value only once. Subsequent @{code setOnce} operations on that user
* property will be ignored.
*
* @param property the user property to setOnce
* @param values the value of the user property
* @return the same Identify object
*/
public Identify setOnce(String property, String[] values) {
addToUserProperties(Constants.AMP_OP_SET_ONCE, property, stringArrayToJSONArray(values));
return this;
}
/**
* Sets a user property value. Existing values for that user property will be overwritten.
*
* @param property the user property to set
* @param value the value of the user property
* @return the same Identify object
*/
public Identify set(String property, boolean value) {
addToUserProperties(Constants.AMP_OP_SET, property, value);
return this;
}
/**
* Sets a user property value. Existing values for that user property will be overwritten.
*
* @param property the user property to set
* @param value the value of the user property
* @return the same Identify object
*/
public Identify set(String property, double value) {
addToUserProperties(Constants.AMP_OP_SET, property, value);
return this;
}
/**
* Sets a user property value. Existing values for that user property will be overwritten.
*
* @param property the user property to set
* @param value the value of the user property
* @return the same Identify object
*/
public Identify set(String property, float value) {
addToUserProperties(Constants.AMP_OP_SET, property, value);
return this;
}
/**
* Sets a user property value. Existing values for that user property will be overwritten.
*
* @param property the user property to set
* @param value the value of the user property
* @return the same Identify object
*/
public Identify set(String property, int value) {
addToUserProperties(Constants.AMP_OP_SET, property, value);
return this;
}
/**
* Sets a user property value. Existing values for that user property will be overwritten.
*
* @param property the user property to set
* @param value the value of the user property
* @return the same Identify object
*/
public Identify set(String property, long value) {
addToUserProperties(Constants.AMP_OP_SET, property, value);
return this;
}
/**
* Sets a user property value. Existing values for that user property will be overwritten.
*
* @param property the user property to set
* @param value the value of the user property
* @return the same Identify object
*/
public Identify set(String property, String value) {
addToUserProperties(Constants.AMP_OP_SET, property, value);
return this;
}
/**
* Sets a user property value. Existing values for that user property will be overwritten.
*
* @param property the user property to set
* @param values the value of the user property
* @return the same Identify object
*/
public Identify set(String property, JSONObject values) {
addToUserProperties(Constants.AMP_OP_SET, property, values);
return this;
}
/**
* Sets a user property value. Existing values for that user property will be overwritten.
*
* @param property the user property to set
* @param values the value of the user property
* @return the same Identify object
*/
public Identify set(String property, JSONArray values) {
addToUserProperties(Constants.AMP_OP_SET, property, values);
return this;
}
/**
* Sets a user property value. Existing values for that user property will be overwritten.
*
* @param property the user property to set
* @param values the value of the user property
* @return the same Identify object
*/
public Identify set(String property, boolean[] values) {
addToUserProperties(Constants.AMP_OP_SET, property, booleanArrayToJSONArray(values));
return this;
}
/**
* Sets a user property value. Existing values for that user property will be overwritten.
*
* @param property the user property to set
* @param values the value of the user property
* @return the same Identify object
*/
public Identify set(String property, double[] values) {
addToUserProperties(Constants.AMP_OP_SET, property, doubleArrayToJSONArray(values));
return this;
}
/**
* Sets a user property value. Existing values for that user property will be overwritten.
*
* @param property the user property to set
* @param values the value of the user property
* @return the same Identify object
*/
public Identify set(String property, float[] values) {
addToUserProperties(Constants.AMP_OP_SET, property, floatArrayToJSONArray(values));
return this;
}
/**
* Sets a user property value. Existing values for that user property will be overwritten.
*
* @param property the user property to set
* @param values the value of the user property
* @return the same Identify object
*/
public Identify set(String property, int[] values) {
addToUserProperties(Constants.AMP_OP_SET, property, intArrayToJSONArray(values));
return this;
}
/**
* Sets a user property value. Existing values for that user property will be overwritten.
*
* @param property the user property to set
* @param values the value of the user property
* @return the same Identify object
*/
public Identify set(String property, long[] values) {
addToUserProperties(Constants.AMP_OP_SET, property, longArrayToJSONArray(values));
return this;
}
/**
* Sets a user property value. Existing values for that user property will be overwritten.
*
* @param property the user property to set
* @param values the value of the user property
* @return the same Identify object
*/
public Identify set(String property, String[] values) {
addToUserProperties(Constants.AMP_OP_SET, property, stringArrayToJSONArray(values));
return this;
}
/**
* Increment a user property by some numerical value. If the user property does not have
* a value set, it will be initialized to 0 before being incremented. Value can be
* negative to decrement a user property value.
*
* @param property the user property to increment
* @param value the value (can be negative) to increment
* @return the same Identify object
*/
public Identify add(String property, double value) {
addToUserProperties(Constants.AMP_OP_ADD, property, value);
return this;
}
/**
* Increment a user property by some numerical value. If the user property does not have
* a value set, it will be initialized to 0 before being incremented. Value can be
* negative to decrement a user property value.
*
* @param property the user property to increment
* @param value the value (can be negative) to increment
* @return the same Identify object
*/
public Identify add(String property, float value) {
addToUserProperties(Constants.AMP_OP_ADD, property, value);
return this;
}
/**
* Increment a user property by some numerical value. If the user property does not have
* a value set, it will be initialized to 0 before being incremented. Value can be
* negative to decrement a user property value.
*
* @param property the user property to increment
* @param value the value (can be negative) to increment
* @return the same Identify object
*/
public Identify add(String property, int value) {
addToUserProperties(Constants.AMP_OP_ADD, property, value);
return this;
}
/**
* Increment a user property by some numerical value. If the user property does not have
* a value set, it will be initialized to 0 before being incremented. Value can be
* negative to decrement a user property value.
*
* @param property the user property to increment
* @param value the value (can be negative) to increment
* @return the same Identify object
*/
public Identify add(String property, long value) {
addToUserProperties(Constants.AMP_OP_ADD, property, value);
return this;
}
/**
* Increment a user property by some numerical value. If the user property does not have
* a value set, it will be initialized to 0 before being incremented. Value can be
* negative to decrement a user property value.
*
* @param property the user property to increment
* @param value the value (can be negative) to increment. Server-side we convert
* the string into a number if possible.
* @return the same Identify object
*/
public Identify add(String property, String value) {
addToUserProperties(Constants.AMP_OP_ADD, property, value);
return this;
}
/**
* Increment a user property by some numerical value. If the user property does not have
* a value set, it will be initialized to 0 before being incremented. Value can be
* negative to decrement a user property value.
*
* @param property the user property to increment
* @param values the value (can be negative) to increment. Server-side we flatten
* dictionaries and apply add to each flattened property value.
* @return the same Identify object
*/
public Identify add(String property, JSONObject values) {
addToUserProperties(Constants.AMP_OP_ADD, property, values);
return this;
}
/**
* Append a value or values to a user property. If the user property does not have a value
* set, it will be initialized to an empty list before the new values are appended. If
* the user property has an existing value and it is not a list, it will be converted into
* a list with the new value(s) appended.
*
* @param property the user property property to which to append
* @param value the value being appended
* @return the same Identify object
*/
public Identify append(String property, boolean value) {
addToUserProperties(Constants.AMP_OP_APPEND, property, value);
return this;
}
/**
* Append a value or values to a user property. If the user property does not have a value
* set, it will be initialized to an empty list before the new values are appended. If
* the user property has an existing value and it is not a list, it will be converted into
* a list with the new value(s) appended.
*
* @param property the user property property to which to append
* @param value the value being appended
* @return the same Identify object
*/
public Identify append(String property, double value) {
addToUserProperties(Constants.AMP_OP_APPEND, property, value);
return this;
}
/**
* Append a value or values to a user property. If the user property does not have a value
* set, it will be initialized to an empty list before the new values are appended. If
* the user property has an existing value and it is not a list, it will be converted into
* a list with the new value(s) appended.
*
* @param property the user property property to which to append
* @param value the value being appended
* @return the same Identify object
*/
public Identify append(String property, float value) {
addToUserProperties(Constants.AMP_OP_APPEND, property, value);
return this;
}
/**
* Append a value or values to a user property. If the user property does not have a value
* set, it will be initialized to an empty list before the new values are appended. If
* the user property has an existing value and it is not a list, it will be converted into
* a list with the new value(s) appended.
*
* @param property the user property property to which to append
* @param value the value being appended
* @return the same Identify object
*/
public Identify append(String property, int value) {
addToUserProperties(Constants.AMP_OP_APPEND, property, value);
return this;
}
/**
* Append a value or values to a user property. If the user property does not have a value
* set, it will be initialized to an empty list before the new values are appended. If
* the user property has an existing value and it is not a list, it will be converted into
* a list with the new value(s) appended.
*
* @param property the user property property to which to append
* @param value the value being appended
* @return the same Identify object
*/
public Identify append(String property, long value) {
addToUserProperties(Constants.AMP_OP_APPEND, property, value);
return this;
}
/**
* Append a value or values to a user property. If the user property does not have a value
* set, it will be initialized to an empty list before the new values are appended. If
* the user property has an existing value and it is not a list, it will be converted into
* a list with the new value(s) appended.
*
* @param property the user property property to which to append
* @param value the value being appended
* @return the same Identify object
*/
public Identify append(String property, String value) {
addToUserProperties(Constants.AMP_OP_APPEND, property, value);
return this;
}
/**
* Append a value or values to a user property. If the user property does not have a value
* set, it will be initialized to an empty list before the new values are appended. If
* the user property has an existing value and it is not a list, it will be converted into
* a list with the new value(s) appended.
*
* @param property the user property property to which to append
* @param values the values being appended
* @return the same Identify object
*/
public Identify append(String property, JSONArray values) {
addToUserProperties(Constants.AMP_OP_APPEND, property, values);
return this;
}
/**
* Append a value or values to a user property. If the user property does not have a value
* set, it will be initialized to an empty list before the new values are appended. If
* the user property has an existing value and it is not a list, it will be converted into
* a list with the new value(s) appended.
*
* @param property the user property property to which to append
* @param values the values being appended. Server-side we flatten dictionaries and apply
* append to each flattened property.
* @return the same Identify object
*/
public Identify append(String property, JSONObject values) {
addToUserProperties(Constants.AMP_OP_APPEND, property, values);
return this;
}
/**
* Append a value or values to a user property. If the user property does not have a value
* set, it will be initialized to an empty list before the new values are appended. If
* the user property has an existing value and it is not a list, it will be converted into
* a list with the new value(s) appended.
*
* @param property the user property property to which to append
* @param values the values being appended
* @return the same Identify object
*/
public Identify append(String property, boolean[] values) {
addToUserProperties(Constants.AMP_OP_APPEND, property, booleanArrayToJSONArray(values));
return this;
}
/**
* Append a value or values to a user property. If the user property does not have a value
* set, it will be initialized to an empty list before the new values are appended. If
* the user property has an existing value and it is not a list, it will be converted into
* a list with the new value(s) appended.
*
* @param property the user property property to which to append
* @param values the values being appended
* @return the same Identify object
*/
public Identify append(String property, double[] values) {
addToUserProperties(Constants.AMP_OP_APPEND, property, doubleArrayToJSONArray(values));
return this;
}
/**
* Append a value or values to a user property. If the user property does not have a value
* set, it will be initialized to an empty list before the new values are appended. If
* the user property has an existing value and it is not a list, it will be converted into
* a list with the new value(s) appended.
*
* @param property the user property property to which to append
* @param values the values being appended
* @return the same Identify object
*/
public Identify append(String property, float[] values) {
addToUserProperties(Constants.AMP_OP_APPEND, property, floatArrayToJSONArray(values));
return this;
}
/**
* Append a value or values to a user property. If the user property does not have a value
* set, it will be initialized to an empty list before the new values are appended. If
* the user property has an existing value and it is not a list, it will be converted into
* a list with the new value(s) appended.
*
* @param property the user property property to which to append
* @param values the values being appended
* @return the same Identify object
*/
public Identify append(String property, int[] values) {
addToUserProperties(Constants.AMP_OP_APPEND, property, intArrayToJSONArray(values));
return this;
}
/**
* Append a value or values to a user property. If the user property does not have a value
* set, it will be initialized to an empty list before the new values are appended. If
* the user property has an existing value and it is not a list, it will be converted into
* a list with the new value(s) appended.
*
* @param property the user property property to which to append
* @param values the values being appended
* @return the same Identify object
*/
public Identify append(String property, long[] values) {
addToUserProperties(Constants.AMP_OP_APPEND, property, longArrayToJSONArray(values));
return this;
}
/**
* Append a value or values to a user property. If the user property does not have a value
* set, it will be initialized to an empty list before the new values are appended. If
* the user property has an existing value and it is not a list, it will be converted into
* a list with the new value(s) appended.
*
* @param property the user property property to which to append
* @param values the values being appended
* @return the same Identify object
*/
public Identify append(String property, String[] values) {
addToUserProperties(Constants.AMP_OP_APPEND, property, stringArrayToJSONArray(values));
return this;
}
/**
* Prepend a value or values to a user property. Prepend means inserting the value(s) at the
* front of a given list. if the user property does not have a value set, it will be
* initialized to an empty list before the new values are prepended. If the user property
* has an existing value and it is not a list, it will be converted into a list with the
* new value(s) prepended.
*
* @param property the user property to which to append
* @param value the value being prepended
* @return the same Identify object
*/
public Identify prepend(String property, boolean value) {
addToUserProperties(Constants.AMP_OP_PREPEND, property, value);
return this;
}
/**
* Prepend a value or values to a user property. Prepend means inserting the value(s) at the
* front of a given list. if the user property does not have a value set, it will be
* initialized to an empty list before the new values are prepended. If the user property
* has an existing value and it is not a list, it will be converted into a list with the
* new value(s) prepended.
*
* @param property the user property to which to append
* @param value the value being prepended
* @return the same Identify object
*/
public Identify prepend(String property, double value) {
addToUserProperties(Constants.AMP_OP_PREPEND, property, value);
return this;
}
/**
* Prepend a value or values to a user property. Prepend means inserting the value(s) at the
* front of a given list. if the user property does not have a value set, it will be
* initialized to an empty list before the new values are prepended. If the user property
* has an existing value and it is not a list, it will be converted into a list with the
* new value(s) prepended.
*
* @param property the user property to which to append
* @param value the value being prepended
* @return the same Identify object
*/
public Identify prepend(String property, float value) {
addToUserProperties(Constants.AMP_OP_PREPEND, property, value);
return this;
}
/**
* Prepend a value or values to a user property. Prepend means inserting the value(s) at the
* front of a given list. if the user property does not have a value set, it will be
* initialized to an empty list before the new values are prepended. If the user property
* has an existing value and it is not a list, it will be converted into a list with the
* new value(s) prepended.
*
* @param property the user property to which to append
* @param value the value being prepended
* @return the same Identify object
*/
public Identify prepend(String property, int value) {
addToUserProperties(Constants.AMP_OP_PREPEND, property, value);
return this;
}
/**
* Prepend a value or values to a user property. Prepend means inserting the value(s) at the
* front of a given list. if the user property does not have a value set, it will be
* initialized to an empty list before the new values are prepended. If the user property
* has an existing value and it is not a list, it will be converted into a list with the
* new value(s) prepended.
*
* @param property the user property to which to append
* @param value the value being prepended
* @return the same Identify object
*/
public Identify prepend(String property, long value) {
addToUserProperties(Constants.AMP_OP_PREPEND, property, value);
return this;
}
/**
* Prepend a value or values to a user property. Prepend means inserting the value(s) at the
* front of a given list. if the user property does not have a value set, it will be
* initialized to an empty list before the new values are prepended. If the user property
* has an existing value and it is not a list, it will be converted into a list with the
* new value(s) prepended.
*
* @param property the user property to which to append
* @param value the value being prepended
* @return the same Identify object
*/
public Identify prepend(String property, String value) {
addToUserProperties(Constants.AMP_OP_PREPEND, property, value);
return this;
}
/**
* Prepend a value or values to a user property. Prepend means inserting the value(s) at the
* front of a given list. if the user property does not have a value set, it will be
* initialized to an empty list before the new values are prepended. If the user property
* has an existing value and it is not a list, it will be converted into a list with the
* new value(s) prepended.
*
* @param property the user property to which to append
* @param values the value being prepended
* @return the same Identify object
*/
public Identify prepend(String property, JSONArray values) {
addToUserProperties(Constants.AMP_OP_PREPEND, property, values);
return this;
}
/**
* Prepend a value or values to a user property. Prepend means inserting the value(s) at the
* front of a given list. if the user property does not have a value set, it will be
* initialized to an empty list before the new values are prepended. If the user property
* has an existing value and it is not a list, it will be converted into a list with the
* new value(s) prepended.
*
* @param property the user property to which to append
* @param values the values being prepended. Server-side we flatten dictionaries and apply
* prepend to each flattened property.
* @return the same Identify object
*/
public Identify prepend(String property, JSONObject values) {
addToUserProperties(Constants.AMP_OP_PREPEND, property, values);
return this;
}
/**
* Prepend a value or values to a user property. Prepend means inserting the value(s) at the
* front of a given list. if the user property does not have a value set, it will be
* initialized to an empty list before the new values are prepended. If the user property
* has an existing value and it is not a list, it will be converted into a list with the
* new value(s) prepended.
*
* @param property the user property to which to append
* @param values the values being prepended
* @return the same Identify object
*/
public Identify prepend(String property, boolean[] values) {
addToUserProperties(Constants.AMP_OP_PREPEND, property, booleanArrayToJSONArray(values));
return this;
}
/**
* Prepend a value or values to a user property. Prepend means inserting the value(s) at the
* front of a given list. if the user property does not have a value set, it will be
* initialized to an empty list before the new values are prepended. If the user property
* has an existing value and it is not a list, it will be converted into a list with the
* new value(s) prepended.
*
* @param property the user property to which to append
* @param values the values being prepended
* @return the same Identify object
*/
public Identify prepend(String property, double[] values) {
addToUserProperties(Constants.AMP_OP_PREPEND, property, doubleArrayToJSONArray(values));
return this;
}
/**
* Prepend a value or values to a user property. Prepend means inserting the value(s) at the
* front of a given list. if the user property does not have a value set, it will be
* initialized to an empty list before the new values are prepended. If the user property
* has an existing value and it is not a list, it will be converted into a list with the
* new value(s) prepended.
*
* @param property the user property to which to append
* @param values the values being prepended
* @return the same Identify object
*/
public Identify prepend(String property, float[] values) {
addToUserProperties(Constants.AMP_OP_PREPEND, property, floatArrayToJSONArray(values));
return this;
}
/**
* Prepend a value or values to a user property. Prepend means inserting the value(s) at the
* front of a given list. if the user property does not have a value set, it will be
* initialized to an empty list before the new values are prepended. If the user property
* has an existing value and it is not a list, it will be converted into a list with the
* new value(s) prepended.
*
* @param property the user property to which to append
* @param values the values being prepended
* @return the same Identify object
*/
public Identify prepend(String property, int[] values) {
addToUserProperties(Constants.AMP_OP_PREPEND, property, intArrayToJSONArray(values));
return this;
}
/**
* Prepend a value or values to a user property. Prepend means inserting the value(s) at the
* front of a given list. if the user property does not have a value set, it will be
* initialized to an empty list before the new values are prepended. If the user property
* has an existing value and it is not a list, it will be converted into a list with the
* new value(s) prepended.
*
* @param property the user property to which to append
* @param values the values being prepended
* @return the same Identify object
*/
public Identify prepend(String property, long[] values) {
addToUserProperties(Constants.AMP_OP_PREPEND, property, longArrayToJSONArray(values));
return this;
}
/**
* Prepend a value or values to a user property. Prepend means inserting the value(s) at the
* front of a given list. if the user property does not have a value set, it will be
* initialized to an empty list before the new values are prepended. If the user property
* has an existing value and it is not a list, it will be converted into a list with the
* new value(s) prepended.
*
* @param property the user property to which to append
* @param values the values being prepended
* @return the same Identify object
*/
public Identify prepend(String property, String[] values) {
addToUserProperties(Constants.AMP_OP_PREPEND, property, stringArrayToJSONArray(values));
return this;
}
/**
* Unset and remove a user property.
*
* @param property the user property to unset and remove.
* @return the same Identify object
*/
public Identify unset(String property) {
addToUserProperties(Constants.AMP_OP_UNSET, property, true);
return this;
}
/**
* Clear all user properties. Note: the result is irreversible! Also Note:
* clearAll needs to be be sent on its own Identify object without any other operations.
*
* @return the same Identify object.
*/
public Identify clearAll() {
if (userPropertiesOperations.length() > 0) {
if (!userProperties.contains(Constants.AMP_OP_CLEAR_ALL)) {
RakamLog.getLogger().w(TAG, String.format(
"Need to send $clearAll on its own Identify object without any other " +
"operations, ignoring $clearAll"
));
}
return this;
}
try {
userPropertiesOperations.put(Constants.AMP_OP_CLEAR_ALL, true);
} catch (JSONException e) {
RakamLog.getLogger().e(TAG, e.toString());
}
return this;
}
private void addToUserProperties(String operation, String property, Object value) {
if (Utils.isEmptyString(property)) {
RakamLog.getLogger().w(TAG, String.format(
"Attempting to perform operation %s with a null or empty string property, ignoring",
operation
));
return;
}
if (value == null) {
RakamLog.getLogger().w(TAG, String.format(
"Attempting to perform operation %s with null value for property %s, ignoring",
operation, property
));
return;
}
// check that clearAll wasn't already used in this Identify
if (userPropertiesOperations.has(Constants.AMP_OP_CLEAR_ALL)) {
RakamLog.getLogger().w(TAG, String.format(
"This Identify already contains a $clearAll operation, ignoring operation %s",
operation
));
return;
}
// check if property already used in previous operation
if (userProperties.contains(property)) {
RakamLog.getLogger().w(TAG, String.format(
"Already used property %s in previous operation, ignoring operation %s",
property, operation
));
return;
}
try {
if (!userPropertiesOperations.has(operation)) {
userPropertiesOperations.put(operation, new JSONObject());
}
userPropertiesOperations.getJSONObject(operation).put(property, value);
userProperties.add(property);
} catch (JSONException e) {
RakamLog.getLogger().e(TAG, e.toString());
}
}
private JSONArray booleanArrayToJSONArray(boolean[] values) {
JSONArray array = new JSONArray();
for (boolean value : values) array.put(value);
return array;
}
private JSONArray floatArrayToJSONArray(float[] values) {
JSONArray array = new JSONArray();
for (float value : values) {
try {
array.put(value);
} catch (JSONException e) {
RakamLog.getLogger().e(TAG, String.format(
"Error converting float %f to JSON: %s", value, e.toString()
));
}
}
return array;
}
private JSONArray doubleArrayToJSONArray(double[] values) {
JSONArray array = new JSONArray();
for (double value : values) {
try {
array.put(value);
} catch (JSONException e) {
RakamLog.getLogger().e(TAG, String.format(
"Error converting double %d to JSON: %s", value, e.toString()
));
}
}
return array;
}
private JSONArray intArrayToJSONArray(int[] values) {
JSONArray array = new JSONArray();
for (int value : values) array.put(value);
return array;
}
private JSONArray longArrayToJSONArray(long[] values) {
JSONArray array = new JSONArray();
for (long value : values) array.put(value);
return array;
}
private JSONArray stringArrayToJSONArray(String[] values) {
JSONArray array = new JSONArray();
for (String value : values) array.put(value);
return array;
}
/**
* Sets user property.
*
* @param property the property
* @param value the value
* @return the user property
*/
Identify setUserProperty(String property, Object value) {
addToUserProperties(Constants.AMP_OP_SET, property, value);
return this;
}
/**
* Sets a user property value only once. Subsequent @{code setOnce} operations on that user
* property will be ignored. Note: this method has been deprecated. Please use one
* with a different signature.
*
* @param property the user property to setOnce
* @param value the value of the user property
* @return the same Identify object
* @deprecated
*/
public Identify setOnce(String property, Object value) {
RakamLog.getLogger().w(
TAG,
"This version of setOnce is deprecated. Please use one with a different signature."
);
return this;
}
/**
* Sets a user property value. Existing values for that user property will be overwritten.
* Note: this method has been deprecated. Please use one with a different signature.
*
* @param property the user property to set
* @param value the value of the user property
* @return the same Identify object
* @deprecated
*/
public Identify set(String property, Object value) {
RakamLog.getLogger().w(
TAG,
"This version of set is deprecated. Please use one with a different signature."
);
return this;
}
/**
* Public method that exposes the user property operations JSON blob.
* @return a copy of the User Property Operations JSONObject. If copying fails, returns
* an empty JSONObject
*/
public JSONObject getUserPropertiesOperations() {
try {
return new JSONObject(userPropertiesOperations.toString());
} catch (JSONException e) {
RakamLog.getLogger().e(TAG, e.toString());
}
return new JSONObject();
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy