Skip to content

Instantly share code, notes, and snippets.

@flovilmart
Created February 25, 2016 17:34
Show Gist options
  • Save flovilmart/bf64276507d685ae41f6 to your computer and use it in GitHub Desktop.
Save flovilmart/bf64276507d685ae41f6 to your computer and use it in GitHub Desktop.
_PushStatus specification
// PushStatus contains information about a push that was sent by an app. Its
// BSON format is stored directly in Mongo. Its JSON format is the REST format
// exposed to external developers, e.g. "_id" is mapped to "objectId",
// "_created_at" is mapped to "createdAt", etc.
type PushStatus struct {
// ObjectID is a string matching the standard Parse object id format.
ObjectID string `bson:"_id" json:"objectId"`
// CreatedAt contains the current modification time for this object.
CreatedAt TimeString `bson:"_created_at" json:"createdAt"`
// UpdatedAt contains the last modification time for this object.
UpdatedAt TimeString `bson:"_updated_at" json:"updatedAt"`
// PushTime represents the time the push should be sent. For a local push,
// it does not have a time zone (e.g. "2014-04-28T13:50:00"). For an
// absolute time push, it has a time zone (e.g. "2014-04-28T20:35:00Z").
PushTime string `bson:"pushTime,omitempty" json:"pushTime,omitempty"`
// Source is how a push was triggered (e.g. "webui" or "rest").
Source string `bson:"source" json:"source"`
// Query is the JSON query to execute over _Installation for push targeting.
// It is stored as a string because sub-document types cannot contain "$".
Query PushJSONStringEncodedMap `bson:"query" json:"query"`
// Payload is the JSON push payload to deliver to devices.
Payload PushJSONStringEncodedMap `bson:"payload" json:"payload"`
// Title is the title of the push campaign.
Title string `bson:"title,omitempty" json:"title,omitempty"`
// Expiry is when the push expires, expressed in seconds since the epoch.
Expiry int64 `bson:"expiry,omitempty" json:"expiry,omitempty"`
// Status is the state of the push send, e.g. "pending", "running",
// "succeeded", or "failed".
Status string `bson:"status" json:"status"`
// NumSent is the number of devices this push was sent to.
NumSent int `bson:"numSent" json:"numSent"`
// PushHash is the MD5 of the push payload.
PushHash string `bson:"pushHash" json:"pushHash"`
// Error is the error message associated with a failed push send.
Error string `bson:"errorMessage,omitempty" json:"errorMessage,omitempty"`
// ExpansionDuration is the time in seconds spent executing the expansion
// phase of the push.
// WE CAN OMIT THAT
ExpansionDuration float64 `bson:"expansionDuration,omitempty" json:"expansionDuration,omitempty"`
// SentPerUTCOffset is the number of pushes sent to each UTC offset, where
// the UTC offset is a string representing the number of seconds offset from
// UTC (e.g. "-43200").
// Not sure that is useful for the initial implementation
SentPerUTCOffset map[string]int `bson:"sentPerUtcOffset,omitempty" json:"sentPerUtcOffset,omitempty"`
// SentPerType is the number of pushes sent to each type of push network.
SentPerType map[string]int `bson:"sentPerType,omitempty" json:"sentPerType,omitempty"`
// Experiment contains information about the experiment this push belongs to.
// Not required for now
Experiment *PushStatusExperiment `bson:"experiment,omitempty" json:"experiment,omitempty"`
// PushAudienceId is the ID of the saved push audience this push was sent to.
// If if was not sent to a saved push audience, this field is blank.
// OMIT for now, We don't have the audience
PushAudienceID string `bson:"pushAudienceId,omitempty" json:"pushAudienceId,omitempty"`
// ID to group translated push messages.
// Not sure we support that yet
TranslationID string `bson:"translation_id,omitempty" json:"translation_id,omitempty"`
// Corresponding locale for this push.
// Not sure we support that yet
TranslationLocale string `bson:"translation_locale,omitempty" json:"translation_locale,omitempty"`
}
// PushStatusExperiment contains information about the experiment this push
// belongs experiment to.
type PushStatusExperiment struct {
// ID is the object ID of the related PushExperiment.
ID string `bson:"experiment_id" json:"experiment_id"`
// First is the first bucket of the experiment (inclusive).
First int `bson:"first" json:"first"`
// Last is the last bucket of the experiment (exclusive).
Last int `bson:"last" json:"last"`
// Group is the group name of the experiment.
Group string `bson:"group,omitempty" json:"group,omitempty"`
// Type is the experiment type ("time" for a time-based test of the same
// payload and "message" for a test that varies the push payload).
Type string `bson:"type,omitempty" json:"type,omitempty"`
// ParentPushStatusID contains the push status ID of the parent push.
ParentPushStatusID string `bson:"parent_push_status_id,omitempty" json:"parent_push_status_id,omitempty"`
}
@gateway
Copy link

gateway commented Feb 25, 2016

Wouldnt this be a great place to get the device tokens no longer valid from the feedback, thus also adding the ability to disable the push....

something like this


function handleFeedback(feedbackData) {
    feedbackData.forEach(function(feedbackItem) {
        console.log("Device: " + feedbackItem.device.toString("hex") + " has been unreachable, since: " + feedbackItem.time);
    });
}

// Setup a connection to the feedback service using a custom interval (10 seconds)
var feedback = new apn.feedback({ production: false, interval: 10 });

feedback.on("feedback", handleFeedback);
feedback.on("feedbackError", console.error);

Found this on node-apn.. https://github.com/argon/node-apn/search?utf8=%E2%9C%93&q=feedback

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment