2015-01-13 2 views
1

Я пытаюсь отправить push-уведомления через Quickblox с моего сервера. Код, который делает это, выглядит следующим образом:Как отправить push-уведомления формы javascript с помощью quickblox

app.post('/requests', function(req, res) { 

    var mobileNumber = req.param('mobile_number'); 

    if (typeof mobileNumber === 'undefined') { 
     return res.badRequest("Parameters missing: [mobile_number]"); 
    } 

    var query = { 
     international_number: mobileNumber 
    } 
    User.findOne(query, function(err, user) { 
     if (err) { 
      return res.dbError(err); 
     } 
     if (!user) { 
      console.log("User not found"); 
      return res.apiError("NOT_FOUND"); 
     } 

     var request = new Request(); 
     request.sender_id = req.user._id; 
     request.receiver_id = user._id; 
     request.status = 'pending'; 

     request.save(function(err) { 
      if (err) { 
       return res.dbError(err); 
      } 
      var response = {}; 
      response.image_url = user.image_url; 
      response.id = request._id; 

      // ¡TODO! Notify the end user -- Quickblox 
      QB.createSession(function(err, result) { 
       if (err) { 
        console.log(err); 
        return res.apiError(); 
       } 
       console.log("**** SESSION CREATE ****") 
       console.log(result); 
       var params = { 
        login: req.user.qb_username, 
        password: req.user.qb_password 
       } 
       console.log("LOGIN PARAMS"); 
       console.log(params); 
       QB.login(params, function(err, result) { 
        if (err) { 
         console.log(err); 
         return res.apiError(); 
        } 
        console.log("**** USER LOGIN ****") 
        console.log(result); 
        var params = { 
         notification_type: 'push', 
         environment: 'production', 
         user : { 
          ids: user.qb_id 
         }, 
         message: 'SSBsb3ZlIE0mTSdzISBFc3BlY2lhbGx5IHJlZCBvbmUh', 
         push_type: user.device.notification_channel 
        } 
        console.log("EVENTS CREATE PARAMS"); 
        console.log(params); 
        QB.messages.events.create(params, function(err, result) { 
         if (err) { 
          console.log(err); 
          return res.apiError(); 
         } 
         console.log("**** MESSAGE EVENT CREATE ****"); 
         console.log(result); 
         console.log(result.event.subscribers_selector); 
         QB.messages.events.list(function(err, result) { 
          if (err) { 
           console.log(err); 
           return res.apiError(); 
          } 
          console.log(result); 
          console.log("**** EVENTS LIST ****"); 
          console.log(result.items); 
          res.apiSend(response); 

         }); 
        }); 
       }); 
      }); 
     }); 
    }); 
}); 

Обратите внимание, что я регистрирую ответ после каждого запроса Quickblox. Таким образом, журнал после QB.messages.events.create() заключается в следующем:

**** MESSAGE EVENT CREATE **** 
{ event: 
    { active: true, 
    application_id: 18113, 
    created_at: '2015-01-13T10:32:45Z', 
    date: null, 
    end_date: null, 
    event_type: 'one_shot', 
    id: 1809320, 
    message: 'data.message=SStsb3ZlK00lMjZNJTI3cyUyMStFc3BlY2lhbGx5K3JlZCtvbmUlMjE=', 
    name: null, 
    occured_count: 0, 
    period: null, 
    updated_at: '2015-01-13T10:32:45Z', 
    user_id: 2185263, 
    notification_channel: { name: 'gcm' }, 
    subscribers_selector: 
     { environment: 'production', 
     tags_query: null, 
     user_ids: [Object] } } } 

и когда я список событий с помощью QB.messages.events.list() я получаю следующий ответ:

{ current_page: 1, 
    per_page: 10, 
    total_entries: 19, 
    items: 
    [ { event: [Object] }, 
     { event: [Object] }, 
     { event: [Object] }, 
     { event: [Object] }, 
     { event: [Object] }, 
     { event: [Object] }, 
     { event: [Object] }, 
     { event: [Object] }, 
     { event: [Object] }, 
     { event: [Object] } ] } 

Поэтому в нем говорится, что в очереди сообщений есть 19 записей, и все кажется ОК. Однако, когда я вхожу в учетную запись Quickblox и проверяю очередь сообщений, он всегда пуст, и поэтому никакие сообщения не планируются для отправки. Также обратите внимание, что подписки показывают, что пользователи подписались на push-уведомления, такие как «gcm» и «apns». Может ли кто-нибудь помочь мне узнать, почему это происходит, пожалуйста?

+0

http://quickblox.com/developers/Messages #Messages_API - У вас есть: A) Создал токен для пользователя и B) Подписывал их для push-уведомлений? QB не добавит их в очередь, если нет доступных (подписанных) пользователей для их отправки. –

ответ

0
  1. Необходимо кодировать сообщение base64.
  2. Вам необходимо убедиться, что ваше мобильное приложение будет знать, чтобы понять декодированное сообщение.

Например,

отправка толчок уведомления андроида qb_user_id: 20290 (и от меня - мой qb_user_id: 12121):

function b64EncodeUnicode(str) { 
return btoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g, function(match, p1) { 
    return String.fromCharCode('0x' + p1); 
})); 
} 
function send_push() { 
var params = { 
    notification_type: 'push', 
    push_type: 'gcm', 
    user: {ids: [20290]}, 
    environment: "production", 
    message: b64EncodeUnicode('{"message":"HELLO WORLD","user_id":12121,"device_type":"WEB","message_qb_id":"563a55a44cedaa83885724cf","message_type":"Text","send_status":"BeingProcessed","send_time":1446663588607}') 
    }; 

    QB.messages.events.create(params, function(err, response) { 
    if (err) { 
     console.log("QB.messages.events.create::error:" +err); 
    } else { 
     console.log("QB.messages.events.create::response:" + response); 
    } 
    }); 
} 

В этом примере мобильное приложение ищет сообщение в таком формате: {"message", "user_id", "device_type", "message_qb_id", "message_type", "send_status", "send_time"}

Смежные вопросы