Upgrade to Pro — share decks privately, control downloads, hide ads and more …

«Стек технологий и приемов при разработке серверной части мобильного приложения», Сергей Аникин, ТриЛан Вологда

WebDev
September 27, 2014

«Стек технологий и приемов при разработке серверной части мобильного приложения», Сергей Аникин, ТриЛан Вологда

Что происходит, когда web-программисту нужно сделать что-то немного отдаленное от web? С какими проблемами ему приходится столкнуться? Как построить диалог с разработчиком клиентской части мобильного приложения? Обо всем этом, а так же о реализации таких вещей как REST API, Push Notifications, In-App Purchases и т.п. я постараюсь рассказать в рамках своего доклада. Приходите на meetup, будет что обсудить и о чем поспорить.

WebDev

September 27, 2014
Tweet

More Decks by WebDev

Other Decks in Programming

Transcript

  1. Зачем приложению сервер? - все данные в одном месте; -

    один аккаунт; - единые отчеты и статистика; - добавление контента через админку; - безопасность.
  2. ## Новости: ###Request: GET /api/news/ ###Response: { "results": [ {

    "id": 1, "publication_start_date": "2013-07-02T14:22:08Z", "image": "http://hostname/images/news_1.jpg", "title": "Заголовок новости", "preview": "Lorem ipsum...", } ] }
  3. REST-API - независимость от состояния клиента; - GET, POST, PUT,

    DELETE запросы; - XML или JSON ответы; - кэшируемость и GET запросы.
  4. class ArticleSerializer(serializers.ModelSerializer): image = serializers.SerializerMethodField('get_image') class Meta: model = Article

    fields = ('id', 'title', 'content', 'image' 'publication_start_date') def get_image(self, obj): protocol = settings.API_PROTOCOL site = Site.objects.get_current() return '%s://%s%s' % (protocol, site.domain, obj.image.url)
  5. Apple def ios_purchase(receipt_data, purchase_obj, user): verify_url = 'https://buy.itunes.apple.com/verifyReceipt' data =

    {'receipt-data': receipt_data, 'password': IOS_SECRET_KEY} r = requests.post(verify_url, data=json.dumps(data)) response = r.json() if response.get('status') != 0: raise ReceiptError(u'Receipt verification is failed') do_something_with_purchase_obj(purchase_obj, user)
  6. Android def android_purchase(receipt_data, signature, purchase_obj, user): key = settings.GOOGLE_BILLING_KEY verify_key

    = RSA.importKey(base64.decodestring(key)) hash = SHA.new(receipt_data) verifier = PKCS1_v1_5.new(verify_key) signature = base64.decodestring(signature) if not verifier.verify(hash, signature): raise TransactionError(_(u'Invalid transaction signature')) do_something_with_purchase_obj(purchase_obj, user)
  7. apns-clien - python-клиент для APNs from apnsclient import Session, Message,

    APNs def send_ios_notifications(tokens, message, extra_data={}): cert_file = settings.APNS_PRODUCTION_CERT connection_name = 'push_production' session = Session() con = session.get_connection(connection_name, cert_file=cert_file) message = Message(tokens, alert=message, **extra_data) srv = APNs(con) srv.send(message)
  8. gcm-clien - python-клиент для GCM from gcmclient import GCM, JSONMessage

    def send_android_notifications(tokens, message): gcm = GCM(settings.GCM_API_KEY) data = {'message': message} multicast = JSONMessage(tokens, data=data, collapse_key='api_push') gcm.send(multicast)