4shared

Mettre Mobile Back End As A Service à la pratique (Partie 2)

By  |  0 Comments

mobile Aval en tant que service (MBaaS) vise à donner les développeurs d’applications la possibilité de créer de façon transparente nouvelle fonctionnalité complète- multi-plateforme des applications natives et Web. Dans la première partie 1 de cette série, je me promenais dans une démonstration de l’application de messagerie alimenté par la demande Kinvey. Nous avons exploré comment tirer parti de la gestion des utilisateurs, le stockage de fichiers et le magasin de données.

Pour compléter la démonstration, nous devons tirer parti de deux éléments clés de fonctionnalité Kinvey:. Les autorisations fournies par le magasin de données, et les notifications push, qui sont activés grâce à la fonctionnalité de la logique métier

Mettre Mobile Back End As A Service à La Pratique (Partie 2) 2
WATERCOOLER application de messagerie démo. (Voir grande version 3 )

Configuration

Tant le premier article quatre dans cette série et mon premier article expliquant le concept de MBaaS 5 sont des conditions préalables pour cet article. En outre, cet article prend un « application réelle » approche pour comprendre MBaaS. Cela étant dit, une certaine connaissance de l’iOS et Swift serait utile. Cependant, je ai fourni le code source de l’application 6 , de sorte que vous pouvez apprendre et analyser à votre propre rythme.

Permission

En plus de l’appui du magasin de données et le stockage de fichier fourni par Kinvey, il est aussi un modèle de sécurité robuste qui peut être appliquée à l’ensemble de ces données. Tous de la configuration des permissions sur fichiers soit ou objets de banque de données arrive avec le KCSMetadata classe. Cette instance peut être configuré avec les classes du modèle de données personnalisées ou attaché en tant que paramètres dans un fichier lors du téléchargement à la boutique de fichier.

autorisations de fichiers

Comme nous avons discuté plus tôt, la fonctionnalité de gestion de fichiers est un puissant outil de toute MBaaS. Cependant, préciser qui peut accéder à ce contenu est tout aussi important. Dans notre exemple, photos de profil qui sont téléchargés doivent être visibles par tous les utilisateurs. Si nous voulions ajouter partage d’images à la partie de l’application one-to-one messagerie, alors nous voudrions limiter qui peut accéder à l’image. Parce que nous voulons permettre à quiconque de voir la photo de profil, nous pouvons tirer parti de la setGloballyReadable méthode de KCSMetadata pour se assurer que tout seul le créateur peut éditer ce fichier, tout utilisateur peut le lire.

  // Extrait de SignupViewController.swift (http://tuck.cc/1vsaWcr)

// Initialisation avec l'initialisation par défaut
laissez métadonnées = KCSMetadata ();

// Assurez-vous que tous les utilisateurs peuvent accéder à ce fichier
metadata.setGloballyReadable (true);

// Ce est ajoutée à un objet params qui est passé à la méthode de données de téléchargement
fileParams var = [
  KCSFileMimeType: "image / jpeg",
  KCSFileACL: métadonnées
];

// En passant dans cet objet fileParams, le fichier sera lisible par tous
KCSFileStore.uploadData (photoData, options: fileParams, completionBlock: {(fichier: KCSFile !, erreur:! NSError) - & gt; Interdit
    println ("File Upload terminé")
}, ProgressBlock: néant); 

Donnée boutique Droits

Pour faire ce aussi simple que possible d’intégrer dans l’application, je ai défini quelques extensions Swift 7 de aux classes fournies dans le SDK de Kinvey pour iOS. Une telle extension est une initialisation de commodité pour la classe KCSMetadata pour configurer des autorisations pour la Message et MessageThread des classes:

  / *
  Cette méthode est une initialisation de commodité qui définit les autorisations
  sur une instance KCSMetadata pour les ID d'utilisateur transmis dans (et, éventuellement,
  pour l'utilisateur actuel ainsi). Toutes les données persistables dans les données Kinvey
  magasin peut être configuré en utilisant une instance KCSMetadata.
 * /
l'extension KCSMetadata {

  commodité init (UserIds: [chaîne], includeActiveUser: Bool) {
    self.init ()
    ids var = UserIds
    setGloballyReadable (false)
    setGloballyWritable (false)
    if (includeActiveUser) {
      ids.append (KCSUser.activeUser (). userId)
    }
    pour userId dans ids {
      readers.addObject (userId)
      writers.addObject (userId)
    }
  }
} 

Avec cela en place, nous pouvons maintenant initialiser l’instance de méta-données avec les paramètres de sécurité corrects lorsque nous créons une instance de la Message classe. Maintenant, quand il est enregistré, il sera accessible uniquement à l’expéditeur et le destinataire.

  Classe Message: NSObject, KCSPersistable {

  var entityID: String = ""
  var messageText: String!
  var senderID: String!
  var ThreadID: String!
  var userEntryTime: NSDate!
  var métadonnées: KCSMetadata! = Nil

  init (messageText: String, recipientid: String) {
    senderID = KCSUser.activeUser (). userId
    messageText = messageText
    entityID = NSUUID (). UUIDString
    // Ce utilise notre initialisation de commodité pour permettre l'limitée
    // autorisations de seulement l'expéditeur et le destinataire
    métadonnées = KCSMetadata (UserIds: [recipientid], includeActiveUser: true)
  }

  // Vous devez laisser Kinvey savoir quelle propriété correspond à la méta-données
  // Instance. Pour ce faire, en attribuant la propriété du KCSEntityKeyMetadata
  // Valeur dans le procédé de hostToKinveyPropertyMapping.
  override FUNC hostToKinveyPropertyMapping () - & gt; [NSObject: ANYOBJECT]! {
    retourner [
      "EntityID": KCSEntityKeyId,
      "MessageText": "message",
      "SenderID": "senderID",
      "ThreadID": "ThreadID",
      «Métadonnées»: KCSEntityKeyMetadata
    ]
  }
} 

Logique d’affaires et Push Notifications

Un MBaaS solutions qui fournit toutes les fonctionnalités détaillées à ce jour serait suffisante dans un nombre limité de cas d’utilisation. Toutefois, la capacité de centraliser la logique métier liée à quand le cycle de vie d’un objet de données ouvre de nombreuses portes pour la création d’applications multi-plateformes efficaces. Dans l’application de démonstration des fontaines d’eau, cela est pertinent de deux manières distinctes:

  1. Quand un Message instance est enregistrée au magasin de données, nous avons besoin de déterminer qui il est envoyé. Après nous nous sommes assurés du destinataire du message, nous avons besoin de leur envoyer une notification push.
  2. Quand un Message instance est enregistrée au magasin de données, nous avons besoin d’aller chercher aussi le MessageThread instance et sauver la latestMessage propriété. Cela nous évite d’avoir à faire une supplémentaire d’extraction appeler lors du remplissage de l’avis du fil de messages.

Bien que ces deux pourrait être accompli grâce à l’application iOS, ce serait mettre la logique dans le mauvais endroit. Considérez si nous avions aussi un web et l’application Android de l’application des fontaines d’eau. Nous voudrions la même fonctionnalité de se produire sur un message étant enregistré sur ces deux plates-formes ainsi. Dans ce cas, la logique métier qui se étend sur plusieurs plates-formes doit résider sur le serveur en utilisant la capacité de la logique métier de Kinvey.

Configuration des notifications Push

Pour les notifications push pour fonctionner correctement sur iOS, nous avons besoin de configurer Kinvey de travailler avec notre certificat (s) de notification push pour l’application. Cette étape comporte deux étapes distinctes:

  1. configurer l’application avec des certificats de notification push pour le développement et la production dans le Centre des développeurs iOS.
  2. Exportation et téléchargé le certificat requis pour Kinvey.

Le processus complet de réalisation de ces étapes est au-delà du champ d’application de cet article, mais Kinvey a un « Push 8 « guide dans la documentation pour vous aider dans le processus global d’intégration.

Kinvey Collection Crochets

pour atteindre les deux objectifs énumérés ci-dessus, nous misons sur une pièce particulière de fonctionnalité dans Kinvey: collecte crochets. Avec collecte crochets, nous pouvons définir la logique métier côté serveur en JavaScript qui est exécutée à des points particuliers. Les points prédéfinis pour une collection sont énumérés ci-dessous:

  • onPreSave
    Cette logique est exécutée avant une instance étant enregistrés dans le magasin de données. Toutes les erreurs qui se produisent dans cette logique serait empêcher la sauver action d’être exécutée.
  • onPreFetch
    Cette logique est exécutée avant toute commande fetch appellent l’entité tapez. Toutes les erreurs seraient empêcher la chercher action d’être exécutée.
  • onPreDelete
    Cette logique est exécutée avant toute entité instance étant supprimé de la banque de données. Toute erreur empêcheraient l’instance d’être supprimé du magasin de données.
  • onPostSave
    Cette logique serait exécuté après une instance est enregistré dans le magasin de données. Toute erreur ici ne empêcheraient pas l’objet d’être stocké dans le magasin de données, mais ils provoquer une erreur de revenir sur la demande.
  • onPostFetch
    Cette logique serait exécuté après une chercher commande a été exécuté par le magasin de données. Toute erreur ici ne empêcheraient pas l’objet d’être extraites de la mémoire de données, mais ils provoquer une erreur de revenir sur la demande.
  • onPostDelete
    La logique serait exécuté après un exemple est supprimée de la mémoire de données. Toute erreur ici ne empêcheraient pas l’objet d’être supprimé, mais ils provoquer une erreur de revenir pour la demande.

notifications Push sont une partie importante de toute application de messagerie. Idéalement, nous voudrions une à envoyer chaque fois un expéditeur enregistre une Message objet au magasin de données. Kinvey offre cette possibilité grâce à la fonctionnalité des crochets de sa logique d’affaires. En bref, vous pouvez ajouter une logique personnalisée JavaScript qui se exécute à certains points du cycle de vie d’un objet de données.

affaires Modules Logic

Kinvey fournit un ensemble de modules qui vous permettent d’accéder à la fonctionnalité de base dans les Kinvey le code de votre logique métier. Plusieurs modules sont disponibles, mais je ai à profit les modules suivants avec le crochet de logique métier:

  • enregistreur
    Fournit une façon transparente pour enregistrer les informations de votre logique métier à la console Kinvey
  • collectionAccess
    Fournit un moyen d’interroger le magasin de données à partir de votre Kinvey logique métier
  • poussoir
    Fournit un accès à la fonctionnalité de notification push pour Kinvey avec votre logique métier
  • asynchrone
    Fournit une approche pour traiter avec JavaScript asynchrone. Ce est le asynchrone 9 module, vous avez peut-être utilisé dans des applications Node.js.
  • Pour une référence complète sur les modules de logique métier, voir le « Modules 10 « guide dans la section « Business Logic » de la documentation Kinvey.

Ces crochets sont configurés via le Kinvey Console 11 . Pour ajouter un crochet onPostSave pour la collecte des messages, procédez comme suit:

  1. Sélectionnez l’option « Business Logic » dans la navigation sur le côté gauche de la console Kinvey.
  2. Sélectionnez l’option « Créer Votre premier script ».
  3. Dans le menu contextuel, sélectionnez l’option « Ajouter Crochet » pour la collecte des messages.
  4. Sélectionnez l’option onPostSave .
  5. vous verrez la nouvelle onPostSave crochet JavaScript dans le navigateur, que vous pouvez éditer.
Screenshot of Kinvey console - Mettre Mobile Back End As A Service à La Pratique (Partie 2) 12
La section de logique métier de la console de Kinvey. (Agrandir 13 )

code complet de Business Logic

Mettre ces morceaux cède une seule méthode JavaScript qui est à seulement 115 lignes (avec commentaires). Ce code obtient le destinataire, met à jour le fil avec le dernier message puis envoie la notification push au destinataire.

Pour activer ce crochet, copiez cette JavaScript dans le crochet vous venez de créer:

  // Extrait de Messages-PostSave.js (http://tuck.cc/1MPrCAc)

fonctionner onPostSave (requête, réponse, modules) {

  // Obtenez des références à des modules de logique métier de Kinvey
  var = poussoir modules.push;
  var = collectionAccess modules.collectionAccess;
  var = enregistreur modules.logger;
  var = modules.async asynchrone;

  // Tirer des informations de la demande (l'messages de demande postSave)
  var = senderUsername request.username;
  var = messageId request.entityId;
  var message = request.body;

  // Configurer nos variables d'état
  destinataire var = {};

  // Cette méthode récupère le destinataire du message basé sur le fil
  // ID. Cela est nécessaire pour envoyer la notification push au bon utilisateur.
  var getRecipient = function (rappel) {
    var = recipientid recipientIdToFetch ();
    collectionAccess.collection ('user') findOne ({"_id": recipientid}., la fonction (erreur, utilisateur) {
      if (erreur) {
        logger.info ("KCSUser erreur de destinataire Comparaison");
        rappel (erreur);
      } Else {
        recipient = utilisateur;
        rappel (null, récipiendaire);
      }
    });
  };

  // Cette méthode définit le LastMessage sur le MessageThread
  var updateLatestMessage = function (rappel) {
    var = ThreadID message.threadId;

    // Ce est la façon dont Kinvey magasins relations avec d'autres entités.
    // Nous avons simplement besoin d'insérer cet objet pour le fil à la
    // Spécifié ID et nous avons mis à jour la référence.
    var lastMessageRef = {
      _type: "KinveyRef",
      _id: ThreadID,
      _Collection: "Messages"
    };

    // Cette méthode trouve et met à jour le fil avec le jour
    // Référence au message. Elle renvoie le fil de mise à jour
    // Le magasin de données.
    . collectionAccess.collection ('MessageThreads') findAndModify ({"_id": ThreadID}, {"_id": 1}, {$ fixé: {"LastMessage": lastMessageRef}}, {nouvelle: true}, la fonction (erreur, thread) {
      if (erreur) {
        logger.error ("Impossible de récupérer filetage à partir de ID:" + ThreadID);
      } Else {
        rappel (null, fil);
      }
    });
  };

  // Ce vérifie la ThreadID et, sur la base de l'ID de l'utilisateur qui a sauvé la
  // Message, détermine l'ID du destinataire du message.
  var recipientIdToFetch = function () {
    var = ThreadID message.threadId;
    var id = threadId.split (":");
    var recipientid = (identifiants [0] == message.senderId)? ids [1]: ids [0];
    retourner collectionAccess.objectID (recipientid);
  };

  // Cette méthode crée à la fois l'APS et extras objets pouvant être utilisés dans la poussée
  // Notification.
  var pushDataFromMessageAndUser = function (utilisateur) {
    retourner {
      APS: {
        Alerte: notificationAlertMessage (utilisateur),
        Badge: 0,
        son: "notification.wav"
      },
      extras: {
        messageText: message.message,
        creationDate: message._kmd.ect,
        ThreadID: message.threadId,
        senderID: message.senderId,
        entityID: messageId
      }
    };
  };

  // Cette méthode permet de calculer le texte de la notification de poussée sur la base du
  // Expéditeur et le texte du message.
  var notificationAlertMessage = function (utilisateur) {
    alertMessageComponents var = [];
    var = alertMessage Utilisateur.prenom + "";
    alertMessage user.last_name + + = ":";
    alertMessage + = message.message;
    retourner alertMessage;
  };

  // Cette méthode est exécuté après que le destinataire a été extraite de la
  // Collection de l'utilisateur. Il procède à faire l'appel de notification push pour
  // Le destinataire avec les informations correctes.
  var rappel = function (erreur, résultats) {
    if (erreur) {
      response.body = {
        erreur: Error.message
      };
      response.complete (400);
    } Else {
      var = pushData pushDataFromMessageAndUser (résultats [1]);
      push.sendPayload (bénéficiaires, pushData.aps, pushData.extras);
      response.complete (200);
    }
  };

  // Ce débutera le processus pour aller chercher le destinataire et mettre à jour le fil.
  // Une fois que ce est terminé, il appelle la fonction de rappel pour envoyer le
  // Notification push.
  async.parallel ([updateLatestMessage, getRecipient], rappel);
} 

Avec ce code en place (et les notifications push correctement configurés), l’application va maintenant envoyer une notification push pour le bénéficiaire et également mettre à jour la LastMessage propriété dans le fil de messages pertinents. Dans l’image ci-dessous, vous pouvez voir une notification échantillon de poussoir qui a été envoyé au destinataire d’un message:

Screenshot of push notification in WaterCooler app - Mettre Mobile Back End As A Service à La Pratique (Partie 2) 14
Une notification push dans l’application des fontaines d’eau. (Agrandir 15 )

Rassembler les morceaux

Bien que nous ne avons pas marchons à travers chaque étape de la façon dont l’application a été créée, vous avez maintenant un exemple complet d’une application Kinvey que vous pouvez utiliser comme point de départ pour votre propre application. Espérons que cet article vous a donné une bonne compréhension de travail du code requis, mais aussi aidé à réfléchir sur la façon de résoudre des problèmes en utilisant une solution MBaaS.

Screenshots of WaterCooler app - Mettre Mobile Back End As A Service à La Pratique (Partie 2) 16
WATERCOOLER application de messagerie démo. (Agrandir 17 )

Si vous souhaitez continuer à apprendre, vous pouvez ajouter un grand nombre de fonctionnalités à cette application:

  • support pour les images dans les messages,
  • notifications pour quand un utilisateur tape,
  • groupe de messagerie.

Toutes ces caractéristiques serait possible avec extrémité arrière de Kinvey.

Autres ressources

Voici quelques ressources qui ont été utilisées dans la création de notre application:

  • SlackTextViewController 18 , Slack, GitHub
    L’équipe de Slack a publié un contrôle incroyable pour la saisie de texte dans une application de messagerie.
  • MBProgressHUD 19 , Jonathan George, GitHub
    Ce est une commande commune pour montrer superpositions lorsque l’application est en attente sur une tâche à la fin. Il est très personnalisable et configurable.
  • Chercher sous licence Creative Commons icônes sur Freepik 20 , SimpleIcon 21 , Google 22 et Flaticon 23 [ 1999003].
  • Brandon McQuilkin 24 , GitHub
    McQuilkin utilisé pour fournir certains grands extensions d’image Swift pour masquer les images. Depuis mon travail initial sur l’application, il a retiré ces de GitHub.

Conclusion

je espère que dans les quelques derniers articles, vous avez vu façons qu’une solution MBaaS peut vous aider à créer Business- convaincante et expériences mobiles axés sur les consommateurs. Ce est certainement un espace avec beaucoup d’attention en ce moment, et je me attends maturité rapide et l’évolution de ces services au cours de la prochaine année. La plupart ne importe quel développeur mobiles serait d’accord que ce est un outil précieux d’avoir dans votre arsenal.

Voici des ressources supplémentaires de la documentation de Kinvey vous aidera à créer des applications iOS:

  • « Getting Started 25 « 
  • « exemples applications Kinvey 26 « 
  • « Timeline: voir comment notre plate-forme iOS évolue 27 « 

 

Leave a Reply

Votre adresse de messagerie ne sera pas publiée.

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>