This module is currently for testing purposes and can be called through the URL call to notifications/send_extend/%
Where % is the User Id of the user we'll be sending the notification to.
The change to the Payload array is in push_notifications_send_alert_extended .
Super Administration and Administration are the only roles allowed to visit the above link.
Module -> push_notifications_extend
push_notifications_extend.info
name = Push Notifications Extend description = A module for extending the Push Notifications Module core = 7.x dependencies[] = push_notifications
push_notifications_extend.module
'Send APNS Notifications',
'page callback' => 'push_notifications_extend_manual_send',
'access callback' => 'push_notifications_extend_send_access',
'type' => MENU_CALLBACK,
);
return $items;
}
function push_notifications_extend_manual_send() {
$user_to_send_to = arg(2);
$users_to_notify[] = $user_to_send_to;
$return = "Sending push notification to " . count($users_to_notify) . " user.
";
push_notifications_extend_send_message($users_to_notify);
variable_set("user_queue", 0);
variable_set("apns_sent", 0);
return $return;
}
function push_notifications_extend_send_message($users) {
$unix_timestamp = microtime();
$watchdog_msg = 'Sending test message to ' . count($users) . ' user - at ' . $unix_timestamp;
$message = "Test - Log Ref : $unix_timestamp";
push_notifications_send_message_extended($users, $message);
}
/**
* Access callback for users to send APNS.
*
* @return bool
*/
function push_notifications_extend_send_access() {
global $user;
$access = FALSE;
if (in_array('Super Admin', $user->roles) || in_array('administrator', $user->roles)) {
$access = TRUE;
}
return $access;
}
/**
* Send a simple message alert to an array of recipients.
*
* @param array $recipients Array of user ids.
* @param string $message Message to be included in payload.
* @return mixed Flag to indicate if delivery was successful.
*/
function push_notifications_send_message_extended($recipients, $message) {
// Shorten the message characters / 8 bit.
$message = truncate_utf8($message, PUSH_NOTIFICATIONS_APNS_PAYLOAD_SIZE_LIMIT, TRUE, TRUE);
// Convert the payload into the correct format for delivery.
$payload = array('alert' => $message);
$tokens = array();
foreach ($recipients as $uid) {
$user_tokens = push_notification_get_user_tokens($uid);
if (!empty($user_tokens)) {
$tokens = array_merge($tokens, $user_tokens);
}
}
// Stop right here if none of these users have any tokens.
if (empty($tokens)) {
return FALSE;
}
// Send a simple alert message.
push_notifications_send_alert_extended($tokens, $payload);
}
/**
* Handle delivery of simple alert message.
*
* @param array $tokens Array of token record objects.
* @param array $payload Payload.
*
*/
function push_notifications_send_alert_extended($tokens = array(), $payload = array()) {
// Group tokens into types.
$tokens_ios = array();
$tokens_android = array();
foreach ($tokens as $token) {
switch ($token->type) {
case PUSH_NOTIFICATIONS_TYPE_ID_IOS:
$tokens_ios[] = $token->token;
break;
case PUSH_NOTIFICATIONS_TYPE_ID_ANDROID:
$tokens_android[] = $token->token;
break;
}
}
// Send payload to iOS recipients.
if (!empty($tokens_ios)) {
// Convert the payload into the correct format for APNS.
$payload_apns = array('aps' => $payload, 'acme' => 'foo');
push_notifications_apns_send_message($tokens_ios, $payload_apns);
}
// Send payload to Android recipients if configured correctly.
if (!empty($tokens_android) && ((PUSH_NOTIFICATIONS_C2DM_USERNAME && PUSH_NOTIFICATIONS_C2DM_PASSWORD) || PUSH_NOTIFICATIONS_GCM_API_KEY)) {
// Determine which method to use for Google push notifications.
switch (PUSH_NOTIFICATIONS_GOOGLE_TYPE) {
case PUSH_NOTIFICATIONS_GOOGLE_TYPE_C2DM:
push_notifications_c2dm_send_message($tokens_android, $payload);
break;
case PUSH_NOTIFICATIONS_GOOGLE_TYPE_GCM:
push_notifications_gcm_send_message($tokens_android, $payload);
break;
}
}
}