2015-05-27 6 views
0

EDIT:Ионные Нажмите Bad Request 400

Так это выглядит как проблема в том, что выход я вижу всё в одинарные кавычки, а не двойные кавычки, а также есть «и» характер бросают Кто-нибудь имеет представление о том, что может быть причиной этого? Если я попытаюсь проверить JSON, изменив все на двойные кавычки, а также удалив «u», тогда он будет корректно проверяться.

EDIT: 2 Оказывается, что проблема использования UrlEncode, как только я изменил к использованию json.dumps() все работает прекрасно.

Я работаю над реализацией Ionic Push в своем приложении Ionic, и у меня возникли проблемы с созданием правильно отформатированного запроса на услугу «Push», которую вам нужно нажать, чтобы на самом деле отправить push-уведомления.

Я выполняю реализацию python и следуя тому, как они говорят, чтобы настроить его в своем documentation.

Итак, в приведенном ниже коде вы можете увидеть, что я выхожу из Logger.info(post_data), если я беру именно то, что вышло из системы, и сделайте ручный запрос на завивание. Я могу получать push-уведомления на устройство правильно.

Но как только я пытаюсь отправить запрос POST к сервису для отправки сообщения, я получаю ответ 400 BAD REQUEST, поэтому он заставляет меня поверить, что я должен что-то пропускать в своих заголовках/аутентификации? Моя реализация с использованием urllib2, похоже, соответствует тому, что показано в настройке, но я все еще вижу проблему. Любая помощь будет принята с благодарностью.

Это вошедший выход из Logger.info(post_data), и вы также найдете код ниже:

# Output 
{'notification': {'alert': u"Automatic Investments is disabled! We aren't buying you Bitcoin!"}, 'tokens': [u'APA91bGyHR56ANGhiDvlgY7DM7fda2EG4Hp8hSw2arJmaib-BXHT8YWLw5xMloUgZSQvOdzD3Qpg6FMTZeS8b9c2Tl0Rd86qbDa2h_HJKY-pOMP95uNdbUSjJJMuvd-TOs-rhh8gaj6Hs9G0q2LsG7Bc0HtII-O3cQ']} 


# Code 
class PushService(object): 

    def __init__(self, app=None): 
     self.app = app 
     if app is not None: 
      self.init_app(app) 

    def init_app(self, app): 
     self.url = app.config['IONIC_PUSH_ENDPOINT'] 
     self.app_id = app.config['IONIC_PUSH_APP_ID'] 
     self.api_key = app.config['IONIC_PUSH_API_KEY'] 
     self.secret_api_key = app.config['IONIC_PUSH_PRIVATE_KEY'] 

     Logger.info('URL: ' + str(self.url)) 
     Logger.info('APP_ID: ' + str(self.app_id)) 
     Logger.info('API_KEY: ' + str(self.api_key)) 
     Logger.info('SECRET_KEY: ' + str(self.secret_api_key)) 

    def send(self, user, device, message): 

     Logger.info('DEVICE_ID: ' + device.device_id) 

     tokens = [device.device_id] 

     # Set up the data of POST for the push 
     post_data = {"tokens": tokens, 
        "notification": { 
         "alert": message 
         } 
        } 

     # Encode for passing to urllib 
     data = urllib.urlencode(post_data) 

     Logger.info(post_data) 

     Logger.info('RIGHT BEFORE ATTEMPTING TO SEND') 

     app_id = self.app_id 
     app_key = self.secret_api_key 
     url = self.url 
     req = urllib2.Request(url, data=data) 
     req.add_header("Content-Type", "application/json") 
     req.add_header("X-Ionic-Application-Id", app_id) 
     b64 = base64.encodestring('%s:%s' % (app_key, '')).replace('\n', '') 
     req.add_header("Authorization", "Basic %s" % b64) 
     resp = urllib2.urlopen(req) 

     print resp 

ответ

1

Если кто-либо еще с той же проблемой, убедитесь, что вы не используете urllib.urlencode (post_data) , вместо этого используйте json.dumps (post_data), и приведенный выше код будет работать.