2015-01-13 3 views
1

Quickblox를 통해 푸시 알림 메시지를 백엔드 서버에서 보내려고합니다. 이 작업을 수행하는 코드는 다음과 같습니다.quickblox를 사용하여 푸시 알림 양식 javascript를 보내는 방법

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 계정에 로그인하고 메시지 큐를 확인하면 메시지 큐는 항상 비어 있으므로 메시지를 보내지 않도록 예약됩니다. 구독은 'gcm'및 'apns'와 같은 푸시 알림 서비스에 가입 한 사용자를 보여줍니다. 아무도 내가 왜 이런 일이 일어나는지 알 수 없습니까?

+0

http://quickblox.com/developers/Messages #Messages_API - A) 사용자를위한 푸시 토큰 생성 및 B) 푸시 알림에 대한 가입 QB는 구독 할 수있는 사용자가없는 경우 큐에 추가하지 않습니다. –

답변

0
  1. base64에 메시지를 인코딩해야합니다.
  2. 모바일 앱이 디코딩 된 메시지를 이해하고 있는지 확인해야합니다. 이 예에서

    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); 
        } 
        }); 
    } 
    

    , 모바일 앱을 찾고있다 : - 20,290 (: 12,121 내 qb_user_id이 나를에서 :) 안드로이드 qb_user_id에 푸시 알림을 보내 예를 들어

,

다음 형식의 메시지 : { "message", "user_id", "device_type", "message_qb_id", "message_type", "send_status", "send_time"}

관련 문제