SlideShare ist ein Scribd-Unternehmen logo
1 von 41
Downloaden Sie, um offline zu lesen
CocoaHeads Rennes #10         Gwennin Le Bourdonnec
     10 mai 2012                 Marc Audefroy




       Les Notifications
                Push et Locales
Vos Speakers

• Gwennin Le Bourdonnec
  	
  Etudiant 3ème année à Supinfo Rennes

• Marc Audefroy
  Etudiant 2ème année à Supinfo Rennes
Laboratoire Apple
         Supinfo Rennes
Regroupement étudiant de passionés.
Appronfondissement de la techno
Réalisation de projets divers
Le Problème


Comment interagir/informer l’utilisateur de nouveau
                    contenu ?
Sommaire

•   Qu’est ce qu’une Notification?

•   Local et Push

•   Les notifications locales

•   Les notifications push

•   Résumé
Qu’est-ce qu’une
 notification ?
• Préviens l’utilisateur
    • Nouvelles données
    • Action
    • Évènement
      (Calendrier…)
    • …
Propriétés

•   Badges

•   Sons

•   Alert View

•   Informations « Custom »
Local VS Push ?
Local Notification             Push Notification

• Depuis le device             • Depuis un serveur

• Se lance à une date et une   • Est envoyé lors de nouvelles
  heure précise                  données

                               • Arrivée incertaine
Local Notification
Local Notification

•   iOS4 – OSX 10.8
•   Depuis le device
•   Envoyé à une date et une heure précise
•   64 notifications maximum
Actions

•   - (void)application:(UIApplication *)application
    didReceiveLocalNotification:
    (UILocalNotification *)notification

•   - (BOOL)application:(UIApplication *)application
    didFinishLaunchingWithOptions:
    (NSDictionary *)launchOptions
Démo
Push Notifications
Push Notifications


•   iOS 3 – OSX 10.7
•   Depuis un serveur
•   Nécessite une inscription du device
3 Plateformes

Le Provider                   Le Device




                  L’APNs
Chemin classique du
     système de Push
•   Récupération d’un “deviceToken” par
    l’application auprès de l’APNs
•   Inscription du Device auprès du Provider
•   Reconnexion du Device auprès de l’APNs
•   Envois d’un Push par le Provider
•   Réception du push par l’application
Communication
Device – APNs
 Inscription auprès du provider
Connexion du Device

•   Le Device initialise la connexion
•   Le Device valide le certificat de l’APNs
•   L’APNs valide le certificat du Device
•   L’APNs établit la connexion
Inscription du Device
•   Le device se connecte à l’APNs
•   l’APNs génére un “deviceToken” avec les
    informations que lui fournit le
    device(certificat)
•   l’APNs chiffre le “deviceToken” avec une
    “token Key”
•   L’APNs envoie le “deviceToken” au device
•   L’application réceptionne le deviceToken et le
    transmet au provider
Inscription du Device

•   - (void)registerForRemoteNotificationTypes:
    (UIRemoteNotificationType)types

•   - (void)application:(UIApplication *)application
    didRegisterForRemoteNotificationsWithDeviceToken:
    (NSData *)deviceToken

•   - (void)application:(UIApplication *)application
    didFailToRegisterForRemoteNotificationsWithError:
    (NSError *)error
Démo
Communication
Provider – APNs
   Envois d’un push
Connexion du Provider

•   Le Provider initialise la connexion
•   Le Provider valide le certificat de l’APNs
•   L’APNs valide le certificat du Provider
•   L’APNs établit la connexion
Environnements


•   Sandbox
    gateway.sandbox.push.apple.com:2195
•   Production
    gateway.push.apple.com:2195
Envois d’un Push par le
       Provider

•   Le Provider se connecte à l’APNs
•   Le Provider envoie le deviceToken et la
    notification à l’APNs
•   L’APNs déchiffre le deviceToken avec la
    “token Key”
La Notification
•   Dictionnaire Json RFC 4627
    {!
         "aps" : {!
             "alert" : {!
              "         ""body” : "Message de l’alert View",!
              "         ""action-loc-key” : "Voir",!
              "         ""launch-image" : "nomDeMonImage.png"!
              "},!
             "badge" : 9,!
             "sound" : "bingbong.aiff"!
         },!
         "acme1" : "bar",!
         "acme2" : 42!
    }!




•   256 Octets maximum
•   Pas d’informations sensibles
Packet Simple de Notification
Packet Amélioré de Notification
Packet d’Erreur
          0     No Error Encountered
          1     Processing Error
          2     Missing device token
          3     Missing topic
          4     Missing payload
          5     Invalid token size
          6     Invalid topic size
          7     Invalid payload size
          8     Invalid token
          255   None (unknown)
Packet de FeedBack
Exemples de Provider
Library

•   apnsphp ( code.google.com/p/apns-php/ )
•   easy apns ( www.easyapns.com/ )
•   apns-sharp ( github.com/Redth/APNS-Sharp )
•   java-apns ( https://github.com/notnoop/java-apns )
•   Bien d’autres...
Exemples de Provider
Services

•   Urban Airship ( urbanairship.com )
•   AppNotify ( appnotify.com/developer )
•   ...
Communication
Device – APNs
  Réception du push
Reconnexion du Device

•   Le device initialise la connexion
•   L’APNs valide le certificat & le deviceToken
    du device
•   L’APNs établit la connexion
Envois du push


•   L’APNs transfère la notification au device
    correspondant au deviceToken
•   Le device transfère la notification à
    l’application
Actions

•   - (void)application:(UIApplication
    *)application didReceiveRemoteNotification:
    (NSDictionary *)userInfo

•   - (BOOL)application:(UIApplication
    *)application didFinishLaunchingWithOptions:
    (NSDictionary *)launchOptions
Démo
Pour résumer
Pour aller plus loin


•   La documentation Apple ( developer.apple.com )
•   Raywenderlich.com ( http://
    www.raywenderlich.com/3443/apple-push-notification-
    services-tutorial-part-12 )
CocoaHeads Rennes #10      julien@cocoaheads.fr
      10 mai 2012           thomas.dupont@cocoaheads.fr




                         Merci

email: Gwennin.LeBourdonnec@supinfo.com
twitter: @Gwennin
site : gwennin.me

email: Marc.Audefroy@supinfo.com
twitter: @MarcAudefroy

email: laboAppleRennes@supinfo.com
site : www.labo-apple.com

Weitere ähnliche Inhalte

Ähnlich wie CocoaHeads Rennes #10 : Notifications

CocoaHeads Rennes #6
CocoaHeads Rennes #6CocoaHeads Rennes #6
CocoaHeads Rennes #6CocoaHeadsRNS
 
Sécurité des applications web: attaque et défense
Sécurité des applications web: attaque et défenseSécurité des applications web: attaque et défense
Sécurité des applications web: attaque et défenseAntonio Fontes
 
Test_Logiciel_appium Version2.ppt projet univerx
Test_Logiciel_appium Version2.ppt projet univerxTest_Logiciel_appium Version2.ppt projet univerx
Test_Logiciel_appium Version2.ppt projet univerxEnochBidima3
 
POC Notes de frais
POC Notes de fraisPOC Notes de frais
POC Notes de fraispprem
 
Industrialiser le contrat dans un projet PHP
Industrialiser le contrat dans un projet PHPIndustrialiser le contrat dans un projet PHP
Industrialiser le contrat dans un projet PHPhalleck45
 
Javascript as a first programming language : votre IC prête pour la révolution !
Javascript as a first programming language : votre IC prête pour la révolution !Javascript as a first programming language : votre IC prête pour la révolution !
Javascript as a first programming language : votre IC prête pour la révolution !VISEO
 
Model de qualité @ msdevmtl
Model de qualité @ msdevmtlModel de qualité @ msdevmtl
Model de qualité @ msdevmtlMSDEVMTL
 
Configurer kerberos et SharePoint 2010 FR
Configurer kerberos et SharePoint 2010  FRConfigurer kerberos et SharePoint 2010  FR
Configurer kerberos et SharePoint 2010 FRNicolas Georgeault
 
Déploiement PHP : de l'âge de pierre à nos jours.
Déploiement PHP : de l'âge de pierre à nos jours.Déploiement PHP : de l'âge de pierre à nos jours.
Déploiement PHP : de l'âge de pierre à nos jours.Amélie DUVERNET
 
[FR] C'est quoi une API ?
[FR] C'est quoi une API ?[FR] C'est quoi une API ?
[FR] C'est quoi une API ?OVHcloud
 
SPA avec Angular et SignalR (FR)
SPA avec Angular et SignalR (FR)SPA avec Angular et SignalR (FR)
SPA avec Angular et SignalR (FR)Rui Carvalho
 
La signature de code - Code signing
La signature de code - Code signingLa signature de code - Code signing
La signature de code - Code signingAlice and Bob
 
[AzureCamp 24 Juin 2014] Interactions en "temps réel" pour les applications W...
[AzureCamp 24 Juin 2014] Interactions en "temps réel" pour les applications W...[AzureCamp 24 Juin 2014] Interactions en "temps réel" pour les applications W...
[AzureCamp 24 Juin 2014] Interactions en "temps réel" pour les applications W...Microsoft Technet France
 
Jabes 2011 - Actualités et projets de l'Abes "Les API Sudoc, le Sudoc autrement"
Jabes 2011 - Actualités et projets de l'Abes "Les API Sudoc, le Sudoc autrement"Jabes 2011 - Actualités et projets de l'Abes "Les API Sudoc, le Sudoc autrement"
Jabes 2011 - Actualités et projets de l'Abes "Les API Sudoc, le Sudoc autrement"ABES
 
Plateforme opendata ouverte par In Cité Solution
Plateforme opendata ouverte par In Cité SolutionPlateforme opendata ouverte par In Cité Solution
Plateforme opendata ouverte par In Cité SolutionIn Cité Solution
 
Performance ug#1
Performance ug#1Performance ug#1
Performance ug#1Marc Bojoly
 

Ähnlich wie CocoaHeads Rennes #10 : Notifications (20)

CocoaHeads Rennes #6
CocoaHeads Rennes #6CocoaHeads Rennes #6
CocoaHeads Rennes #6
 
Sécurité des applications web: attaque et défense
Sécurité des applications web: attaque et défenseSécurité des applications web: attaque et défense
Sécurité des applications web: attaque et défense
 
Test_Logiciel_appium Version2.ppt projet univerx
Test_Logiciel_appium Version2.ppt projet univerxTest_Logiciel_appium Version2.ppt projet univerx
Test_Logiciel_appium Version2.ppt projet univerx
 
POC Notes de frais
POC Notes de fraisPOC Notes de frais
POC Notes de frais
 
Industrialiser le contrat dans un projet PHP
Industrialiser le contrat dans un projet PHPIndustrialiser le contrat dans un projet PHP
Industrialiser le contrat dans un projet PHP
 
Javascript as a first programming language : votre IC prête pour la révolution !
Javascript as a first programming language : votre IC prête pour la révolution !Javascript as a first programming language : votre IC prête pour la révolution !
Javascript as a first programming language : votre IC prête pour la révolution !
 
Model de qualité @ msdevmtl
Model de qualité @ msdevmtlModel de qualité @ msdevmtl
Model de qualité @ msdevmtl
 
Configurer kerberos et SharePoint 2010 FR
Configurer kerberos et SharePoint 2010  FRConfigurer kerberos et SharePoint 2010  FR
Configurer kerberos et SharePoint 2010 FR
 
Déploiement PHP : de l'âge de pierre à nos jours.
Déploiement PHP : de l'âge de pierre à nos jours.Déploiement PHP : de l'âge de pierre à nos jours.
Déploiement PHP : de l'âge de pierre à nos jours.
 
[FR] C'est quoi une API ?
[FR] C'est quoi une API ?[FR] C'est quoi une API ?
[FR] C'est quoi une API ?
 
SPA avec Angular et SignalR (FR)
SPA avec Angular et SignalR (FR)SPA avec Angular et SignalR (FR)
SPA avec Angular et SignalR (FR)
 
L'univers Android
L'univers AndroidL'univers Android
L'univers Android
 
La signature de code - Code signing
La signature de code - Code signingLa signature de code - Code signing
La signature de code - Code signing
 
technologie web
technologie webtechnologie web
technologie web
 
[AzureCamp 24 Juin 2014] Interactions en "temps réel" pour les applications W...
[AzureCamp 24 Juin 2014] Interactions en "temps réel" pour les applications W...[AzureCamp 24 Juin 2014] Interactions en "temps réel" pour les applications W...
[AzureCamp 24 Juin 2014] Interactions en "temps réel" pour les applications W...
 
Paris RailsCamp 2009
Paris RailsCamp 2009Paris RailsCamp 2009
Paris RailsCamp 2009
 
Jabes 2011 - Actualités et projets de l'Abes "Les API Sudoc, le Sudoc autrement"
Jabes 2011 - Actualités et projets de l'Abes "Les API Sudoc, le Sudoc autrement"Jabes 2011 - Actualités et projets de l'Abes "Les API Sudoc, le Sudoc autrement"
Jabes 2011 - Actualités et projets de l'Abes "Les API Sudoc, le Sudoc autrement"
 
Plateforme opendata ouverte par In Cité Solution
Plateforme opendata ouverte par In Cité SolutionPlateforme opendata ouverte par In Cité Solution
Plateforme opendata ouverte par In Cité Solution
 
Performance ug#1
Performance ug#1Performance ug#1
Performance ug#1
 
Fully Automated Nagios, Solutions Linux 2009
Fully Automated Nagios, Solutions Linux 2009Fully Automated Nagios, Solutions Linux 2009
Fully Automated Nagios, Solutions Linux 2009
 

Mehr von CocoaHeadsRNS

CocoaHeads Rennes #14: iOS7 Controllers Transitions
 CocoaHeads Rennes #14: iOS7 Controllers Transitions CocoaHeads Rennes #14: iOS7 Controllers Transitions
CocoaHeads Rennes #14: iOS7 Controllers TransitionsCocoaHeadsRNS
 
CocoaHeads Rennes #13 : Magical Record
CocoaHeads Rennes #13 : Magical RecordCocoaHeads Rennes #13 : Magical Record
CocoaHeads Rennes #13 : Magical RecordCocoaHeadsRNS
 
CocoaHeads Rennes #13 : CocoaPods
CocoaHeads Rennes #13 : CocoaPodsCocoaHeads Rennes #13 : CocoaPods
CocoaHeads Rennes #13 : CocoaPodsCocoaHeadsRNS
 
CocoaHeads Rennes #7 : Intégration continue pour les nuls
CocoaHeads Rennes #7 : Intégration continue pour les nulsCocoaHeads Rennes #7 : Intégration continue pour les nuls
CocoaHeads Rennes #7 : Intégration continue pour les nulsCocoaHeadsRNS
 
CocoaHeads Rennes #5 : iOS & Android
CocoaHeads Rennes #5 : iOS & AndroidCocoaHeads Rennes #5 : iOS & Android
CocoaHeads Rennes #5 : iOS & AndroidCocoaHeadsRNS
 
CocoaHeads Rennes #4 : Tests automatisés sur iOS
CocoaHeads Rennes #4 : Tests automatisés sur iOSCocoaHeads Rennes #4 : Tests automatisés sur iOS
CocoaHeads Rennes #4 : Tests automatisés sur iOSCocoaHeadsRNS
 
Cocoaheads Rennes #3 : Bien coder sur iOS
Cocoaheads Rennes #3 : Bien coder sur iOSCocoaheads Rennes #3 : Bien coder sur iOS
Cocoaheads Rennes #3 : Bien coder sur iOSCocoaHeadsRNS
 
CocoaHeads Rennes #3 : Bien débuter sur iOS
CocoaHeads Rennes #3 : Bien débuter sur iOSCocoaHeads Rennes #3 : Bien débuter sur iOS
CocoaHeads Rennes #3 : Bien débuter sur iOSCocoaHeadsRNS
 
CocoaHeads Rennes #2 : Pratiques de développement itératif
CocoaHeads Rennes #2 : Pratiques de développement itératifCocoaHeads Rennes #2 : Pratiques de développement itératif
CocoaHeads Rennes #2 : Pratiques de développement itératifCocoaHeadsRNS
 
CocoaHeads Rennes #1 : internationalisation
CocoaHeads Rennes #1 : internationalisationCocoaHeads Rennes #1 : internationalisation
CocoaHeads Rennes #1 : internationalisationCocoaHeadsRNS
 

Mehr von CocoaHeadsRNS (10)

CocoaHeads Rennes #14: iOS7 Controllers Transitions
 CocoaHeads Rennes #14: iOS7 Controllers Transitions CocoaHeads Rennes #14: iOS7 Controllers Transitions
CocoaHeads Rennes #14: iOS7 Controllers Transitions
 
CocoaHeads Rennes #13 : Magical Record
CocoaHeads Rennes #13 : Magical RecordCocoaHeads Rennes #13 : Magical Record
CocoaHeads Rennes #13 : Magical Record
 
CocoaHeads Rennes #13 : CocoaPods
CocoaHeads Rennes #13 : CocoaPodsCocoaHeads Rennes #13 : CocoaPods
CocoaHeads Rennes #13 : CocoaPods
 
CocoaHeads Rennes #7 : Intégration continue pour les nuls
CocoaHeads Rennes #7 : Intégration continue pour les nulsCocoaHeads Rennes #7 : Intégration continue pour les nuls
CocoaHeads Rennes #7 : Intégration continue pour les nuls
 
CocoaHeads Rennes #5 : iOS & Android
CocoaHeads Rennes #5 : iOS & AndroidCocoaHeads Rennes #5 : iOS & Android
CocoaHeads Rennes #5 : iOS & Android
 
CocoaHeads Rennes #4 : Tests automatisés sur iOS
CocoaHeads Rennes #4 : Tests automatisés sur iOSCocoaHeads Rennes #4 : Tests automatisés sur iOS
CocoaHeads Rennes #4 : Tests automatisés sur iOS
 
Cocoaheads Rennes #3 : Bien coder sur iOS
Cocoaheads Rennes #3 : Bien coder sur iOSCocoaheads Rennes #3 : Bien coder sur iOS
Cocoaheads Rennes #3 : Bien coder sur iOS
 
CocoaHeads Rennes #3 : Bien débuter sur iOS
CocoaHeads Rennes #3 : Bien débuter sur iOSCocoaHeads Rennes #3 : Bien débuter sur iOS
CocoaHeads Rennes #3 : Bien débuter sur iOS
 
CocoaHeads Rennes #2 : Pratiques de développement itératif
CocoaHeads Rennes #2 : Pratiques de développement itératifCocoaHeads Rennes #2 : Pratiques de développement itératif
CocoaHeads Rennes #2 : Pratiques de développement itératif
 
CocoaHeads Rennes #1 : internationalisation
CocoaHeads Rennes #1 : internationalisationCocoaHeads Rennes #1 : internationalisation
CocoaHeads Rennes #1 : internationalisation
 

CocoaHeads Rennes #10 : Notifications

  • 1. CocoaHeads Rennes #10 Gwennin Le Bourdonnec 10 mai 2012 Marc Audefroy Les Notifications Push et Locales
  • 2. Vos Speakers • Gwennin Le Bourdonnec  Etudiant 3ème année à Supinfo Rennes • Marc Audefroy Etudiant 2ème année à Supinfo Rennes
  • 3. Laboratoire Apple Supinfo Rennes Regroupement étudiant de passionés. Appronfondissement de la techno Réalisation de projets divers
  • 4. Le Problème Comment interagir/informer l’utilisateur de nouveau contenu ?
  • 5. Sommaire • Qu’est ce qu’une Notification? • Local et Push • Les notifications locales • Les notifications push • Résumé
  • 7. • Préviens l’utilisateur • Nouvelles données • Action • Évènement (Calendrier…) • …
  • 8. Propriétés • Badges • Sons • Alert View • Informations « Custom »
  • 9. Local VS Push ? Local Notification Push Notification • Depuis le device • Depuis un serveur • Se lance à une date et une • Est envoyé lors de nouvelles heure précise données • Arrivée incertaine
  • 11. Local Notification • iOS4 – OSX 10.8 • Depuis le device • Envoyé à une date et une heure précise • 64 notifications maximum
  • 12. Actions • - (void)application:(UIApplication *)application didReceiveLocalNotification: (UILocalNotification *)notification • - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions: (NSDictionary *)launchOptions
  • 13. Démo
  • 15. Push Notifications • iOS 3 – OSX 10.7 • Depuis un serveur • Nécessite une inscription du device
  • 16. 3 Plateformes Le Provider Le Device L’APNs
  • 17. Chemin classique du système de Push • Récupération d’un “deviceToken” par l’application auprès de l’APNs • Inscription du Device auprès du Provider • Reconnexion du Device auprès de l’APNs • Envois d’un Push par le Provider • Réception du push par l’application
  • 18. Communication Device – APNs Inscription auprès du provider
  • 19. Connexion du Device • Le Device initialise la connexion • Le Device valide le certificat de l’APNs • L’APNs valide le certificat du Device • L’APNs établit la connexion
  • 20. Inscription du Device • Le device se connecte à l’APNs • l’APNs génére un “deviceToken” avec les informations que lui fournit le device(certificat) • l’APNs chiffre le “deviceToken” avec une “token Key” • L’APNs envoie le “deviceToken” au device • L’application réceptionne le deviceToken et le transmet au provider
  • 21. Inscription du Device • - (void)registerForRemoteNotificationTypes: (UIRemoteNotificationType)types • - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken: (NSData *)deviceToken • - (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError: (NSError *)error
  • 22. Démo
  • 23. Communication Provider – APNs Envois d’un push
  • 24. Connexion du Provider • Le Provider initialise la connexion • Le Provider valide le certificat de l’APNs • L’APNs valide le certificat du Provider • L’APNs établit la connexion
  • 25. Environnements • Sandbox gateway.sandbox.push.apple.com:2195 • Production gateway.push.apple.com:2195
  • 26. Envois d’un Push par le Provider • Le Provider se connecte à l’APNs • Le Provider envoie le deviceToken et la notification à l’APNs • L’APNs déchiffre le deviceToken avec la “token Key”
  • 27. La Notification • Dictionnaire Json RFC 4627 {! "aps" : {! "alert" : {! " ""body” : "Message de l’alert View",! " ""action-loc-key” : "Voir",! " ""launch-image" : "nomDeMonImage.png"! "},! "badge" : 9,! "sound" : "bingbong.aiff"! },! "acme1" : "bar",! "acme2" : 42! }! • 256 Octets maximum • Pas d’informations sensibles
  • 28. Packet Simple de Notification
  • 29. Packet Amélioré de Notification
  • 30. Packet d’Erreur 0 No Error Encountered 1 Processing Error 2 Missing device token 3 Missing topic 4 Missing payload 5 Invalid token size 6 Invalid topic size 7 Invalid payload size 8 Invalid token 255 None (unknown)
  • 32. Exemples de Provider Library • apnsphp ( code.google.com/p/apns-php/ ) • easy apns ( www.easyapns.com/ ) • apns-sharp ( github.com/Redth/APNS-Sharp ) • java-apns ( https://github.com/notnoop/java-apns ) • Bien d’autres...
  • 33. Exemples de Provider Services • Urban Airship ( urbanairship.com ) • AppNotify ( appnotify.com/developer ) • ...
  • 34. Communication Device – APNs Réception du push
  • 35. Reconnexion du Device • Le device initialise la connexion • L’APNs valide le certificat & le deviceToken du device • L’APNs établit la connexion
  • 36. Envois du push • L’APNs transfère la notification au device correspondant au deviceToken • Le device transfère la notification à l’application
  • 37. Actions • - (void)application:(UIApplication *)application didReceiveRemoteNotification: (NSDictionary *)userInfo • - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions: (NSDictionary *)launchOptions
  • 38. Démo
  • 40. Pour aller plus loin • La documentation Apple ( developer.apple.com ) • Raywenderlich.com ( http:// www.raywenderlich.com/3443/apple-push-notification- services-tutorial-part-12 )
  • 41. CocoaHeads Rennes #10 julien@cocoaheads.fr 10 mai 2012 thomas.dupont@cocoaheads.fr Merci email: Gwennin.LeBourdonnec@supinfo.com twitter: @Gwennin site : gwennin.me email: Marc.Audefroy@supinfo.com twitter: @MarcAudefroy email: laboAppleRennes@supinfo.com site : www.labo-apple.com