Ввод Mobile Back End, как сервис на практике (Часть 2)

Мобильная Back End в качестве службы (MBaaS) направлена ​​на предоставление разработчикам приложений возможность создавать легко новую функцию-полной кросс-платформенных отечественных и веб-приложений.В первый part 1 этой серии, я прошел через демонстрационное приложение обмена сообщениями на питание от применения Kinvey.Мы исследовали, как использовать управление пользователями, файловое хранилище и хранилище данных .

Для завершения демонстрации, мы должны использовать две основные функциональные части Kinvey: разрешения, предоставленные хранилищем данных, и нажмите уведомления, которые активируются с помощью бизнес-логики функциональности .

Screenshots of WaterCooler app 2
приложение кулера сообщениями демо.( Просмотр большой version 3 )

Настройка Up

Как Первый article 4 в этой серии, и мой начальная статья объясняет концепцию MBaaS 5 предпосылки для этой статьи.Кроме того, эта статья предпринимает «реального приложения» подход к пониманию MBaaS.Это, как говорится, некоторые знания прошивкой и Свифта было бы полезно.Тем не менее, я представил приложения источником code 6 , так что вы можете узнать и проанализировать в своем собственном темпе .

Permissions

В дополнение к хранилищу данных и хранения файлов поддержки, оказываемой Kinvey, есть также надежную модель безопасности, которая может быть применена ко всем этим данным.Все конфигурации для разрешений на любом файлы или объекты хранилища данных произойдет с KCSMetadata класса.Этот экземпляр может быть сконфигурирован с классами модели на заказ данных или прилагается в качестве параметров в файле при загрузке его в хранилище файлов .

Файл Permissions

Как мы уже говорили ранее, функции управления файлами мощный кусок любого инструмента MBaaS.Тем не менее, разъяснение, кто может получить доступ к содержимому не менее важно.В нашем примере, профильные изображения, загруженные должны быть доступны для просмотра всем пользователям.Если бы мы хотелидобавить обмена изображениями части в один-к-одному сообщениями приложения, то мы хотели бы ограничить, кто может получить доступ к изображение.Потому что мы хотим, чтобы кто-нибудь, чтобы увидеть фотографию, мы можем использовать setGloballyReadable Метод KCSMetadata чтобы гарантировать, что в то время как только создатель может редактировать этот файл, то любой пользователь может прочитать его .

// Extracted from SignupViewController.swift (http://tuck.cc/1vsaWcr)

// Initialize with the default initializer
let metadata = KCSMetadata();

// Ensure that all users can access this file
metadata.setGloballyReadable(true);

// This is added to a params object that is passed to the upload data method
var fileParams = [
  KCSFileMimeType : "image/jpeg",
  KCSFileACL : metadata
];

// By passing in this fileParams object, the file will be readable by all
KCSFileStore.uploadData(photoData, options: fileParams, completionBlock: { (file:KCSFile!, error:NSError!) -> Void in
    println("File Upload Completed")
}, progressBlock: nil);

Data Store Permissions

Чтобы сделать это как можно более простым для интеграции в приложения, я определил несколько Swift extensions 7 классам, предусмотренных в SDK Kinvey для IOS.Одним из таких расширение удобство Инициализатор KCSMetadata класс настроить разрешения для Message и MessageThread классы:

/*
  This method is a convenience initializer that sets the permissions
  on a KCSMetadata instance for the user IDs passed in (and, optionally,
  for the current user as well). All persistable data in the Kinvey data
  store can be configured using a KCSMetadata instance.
 */
extension KCSMetadata {

  convenience init(userIds:[String], includeActiveUser:Bool) {
    self.init()
    var ids = userIds
    setGloballyReadable(false)
    setGloballyWritable(false)
    if(includeActiveUser) {
      ids.append(KCSUser.activeUser().userId)
    }
    for userId in ids {
      readers.addObject(userId)
      writers.addObject(userId)
    }
  }
}

В этом месте, теперь мы можем инициализировать экземпляр мета-данных с правильными настройками безопасности, когда мы создаем экземпляр Message класса.Теперь, когда он сохраняется, он будет доступен только отправителю и получателю .

class Message : NSObject, KCSPersistable {

  var entityId:String = ""
  var messageText:String!
  var senderId:String!
  var threadId:String!
  var userEntryTime:NSDate!
  var metadata:KCSMetadata! = nil

  init(messageText:String, recipientId:String) {
    senderId = KCSUser.activeUser().userId
    messageText = messageText
    entityId = NSUUID().UUIDString
    // This uses our convenience initializer to allow for the limited
    // permissions of only the sender and recipient
    metadata = KCSMetadata(userIds: [recipientId], includeActiveUser:true)
  }

  // You have to let Kinvey know which property corresponds to the meta-data
  // instance. Do this by assigning the property the KCSEntityKeyMetadata
  // value in the hostToKinveyPropertyMapping method.
  override func hostToKinveyPropertyMapping() -> [NSObject : AnyObject]! {
    return [
      "entityId" : KCSEntityKeyId,
      "messageText" : "message",
      "senderId" : "senderId",
      "threadId" : "threadId",
      "metadata" : KCSEntityKeyMetadata
    ]
  }
}

Бизнес-логика и нажмите Notifications

Решения MBaaS, что обеспечивает все функциональные возможности, подробно сих пор был бы адекватен в ограниченном наборе вариантов использования.Тем не менее, способность централизовать бизнес-логику, если оно связано с жизненным циклом объекта данных открывает многие двери для создания эффективных кросс-платформенных приложений.В кулера демо-приложения, это относится двумя различными способами:

  1. При Message экземпляр сохраняется в хранилище данных, мы должны определить, кто он направляется.После того как мы установили, что получатель сообщения, нам нужно послать им толчок уведомление .
  2. При Message экземпляр сохраняется в хранилище данных, мы должны также принести MessageThread экземпляр и сохранить latestMessage недвижимость.Это освобождает нас от необходимости делать дополнительные выборки называют при заполнении просмотреть сообщение потока .

Хотя оба они могут быть достигнуты с помощью применения IOS, что бы поставить логику в неправильном месте.Рассмотрим, если мы также имели приложений и веб-Android для приложения кулера.Мы хотели бы те же функции, происходит на сообщения сохраняются на обоих этих платформах, а также.В этом случае, любой бизнес-логики, которая охватывает несколько платформ должен находиться на сервере с помощью бизнес-логики возможность Kinvey в .

Настройка Нажмите Notifications

Для уведомления толчка, чтобы правильно работать на IOS, а нам нужно настроить Kinvey работать с нашей сертификат (ы) Push Notification для приложения.Этот шаг включает в себя два этапа:

  1. Настроить приложение с сертификатами Push Notification для разработки и производства в центре разработчиков IOS .
  2. Экспорт и загрузил нужный сертификат для Kinvey .

Полный процесс выполнения этих шагов выходит за рамки данной статьи, но Kinvey имеет “ Push 8 “руководство в документации, чтобы помочь вам в общем процессе интеграции .

Kinvey Коллекция Hooks

Для достижения двух целей, перечисленных выше, мы можем использовать один конкретный кусок функциональности в Kinvey: сбор крючков.С сбора крючков, мы можем определить на стороне сервера бизнес-логику в JavaScript, который выполняется в определенных точках.Предопределенные точки для коллекции, перечислены ниже:

  • onPreSaveЭта логика выполняется до экземпляра сохраняются в хранилище данных.Любые ошибки, которые происходят в этой логике было бы предотвратить save действия из исполняется .
  • onPreFetchЭта логика выполняется до какого-либо принести призываем entity типа.Любые ошибки будет препятствовать fetch действия из исполняется .
  • onPreDeleteЭта логика выполняется до любого entity экземпляр удаляется из хранилища данных.Любые ошибки будет препятствовать экземпляр от удаления из хранилища данных .
  • onPostSaveЭта логика будет выполнен после экземпляр сохраняется в хранилище данных.Здесь какой-то ошибки не будет препятствовать объект не сохранялась в хранилище данных, но они будут вызывать ошибку, чтобы вернуться по просьбе .
  • onPostFetchЭта логика будет выполнен после fetch команда была выполнена с помощью хранилища данных.Здесь какой-то ошибки не будет препятствовать объект от того, извлекается из хранилища данных, но они будут вызывать ошибку, чтобы вернуться по просьбе .
  • onPostDeleteЛогика будет выполнен после экземпляр удаляется из хранилища данных.Здесь какой-то ошибки не будет препятствовать объект от удаления, но они вызовут ошибку, чтобы вернуться к запросу .

Уведомления Push-это важная часть любого приложения обмена сообщениями.В идеале, мы хотели бы один, чтобы быть отправлены каждый раз отправитель экономит Message объект в хранилище данных.Kinvey предоставляет эту возможность через функциональности своих бизнес-логики в крючки.Короче говоря, вы можете добавлять свою логику JavaScript, который выполняет в определенные моменты жизненного цикла объекта данных .

Бизнес-логика Modules

Kinvey предоставляет набор модулей, которые позволяют получить доступ к базовой функциональности Kinvey в коде бизнес-логики в.Несколько модулей доступны, но я использовала следующие модули бизнес-логики крюк:

  • loggerОбеспечивает плавный способ регистрации информации от бизнес-логики в console
  • collectionAccessПредоставляет возможность запрашивать хранилище данных Kinvey из вашего бизнеса logic
  • pushПредоставляет доступ к функциям Push Notification для Kinvey с вашим бизнесом logic
  • asyncОбеспечивает подход к решению с асинхронным JavaScript.Это async 9 модуль, который вы, возможно, использовали в Node.jsприложения .

Comments are closed.