App academy - Parse

49

description

Presentation I gave for the App Academy about Parse as a backend

Transcript of App academy - Parse

  • 1. Parse mobile backend as a service

2. Timan Rebel Serial Entrepreneur 3. Waarom een backend? 4. Communicatie tussen devices 5. Communicatie tussen gebruikers 6. Communicatie buiten de app om 7. Zelf bouwen vs Uitbesteden 8. Alle vrijheid vs Tijd besparen en andermans expertise gebruiken 9. Wat biedt Parse? Backend as a service 10. Parse Core Meest interessante van de drie 11. Data opslaan in de cloud Tekst Locaties Bestanden (fotos bijv) Data ophalen dmv queries 12. App sociaal maken Inloggen met Facebook en Twitter Inloggen/Registreren met emailadres 13. Lokaal data bewaren Ook toegang tot alle data wanneer er geen internetverbinding is. Dit is bijzonder lastig 14. Eigen website draaien Niet enkel statisch, maar met toegang tot alle data die verzamelt is met de app 15. Background jobs Eenvoudig langdurige processen draaien zonder dat de app er op hoeft te wachten Bijv fotos resizen, emails versturen 16. Parse Dashboard Eenvoudig toegang tot alle data via het web 17. Parse Push Push Notificaties waren nog nooit zo simpel 18. Eenvoudig zelf berichten versturen Via de parse composer 19. Of vanuit de app of ahv bepaalde acties 20. Targeting en Scheduling 21. Parse Analytics Meten is weten 22. Meet het gebruik van je app Installaties Actieve gebruikers Retention 23. Meet het gebruik ahv eigen events Met 1 regel zelf toevoegen aan je app Bijv. wanneer iemand iets shared, een foto liked, voor de eerste keer een actie uitvoert, etc 24. Wat kost Parse? Het is niet gratis, maar. 25. Gratis tot: 30 requests per seconde 20GB file storage 1 miljoen devices voor push Analytics altijd gratis 26. Hoe werkt het dan? Teveel om uit te leggen, maar een aantal voorbeelden 27. PFObject *keynote = [PFObject objectWithClassName:@"Keynote"]; keynote[@"name"] = @Parse; keynote[@"presenterName"] = @Timan Rebel"; keynote[@"boring"] = @NO; [keynote saveInBackground]; 28. PFQuery *query = [PFQuery queryWithClassName:@"Keynote"]; [query getObjectInBackgroundWithId:@"xWMyZ4YEGZ" block:^(PFObject *keynote, NSError *error) { // Do something with the returned PFObject in the keynote variable. if (!error) { // The get request succeeded. Log the score NSLog(@"The presenter was: %@", keynote[@"presenterName"]); } else { // Log details of our failure NSLog(@"Error: %@ %@", error, [error userInfo]); }}]; 29. // First set up a callback. - (void)getCallback:(PFObject *)keynote error:(NSError *)error { if (!error) { // The get request succeeded. Log the score NSLog(@"The presenter was: %@", keynote[@"presenterName"]); } else { // Log details of our failure NSLog(@"Error: %@ %@", error, [error userInfo]); } } // Then, inside another method elsewhere in your code... PFQuery *query = [PFQuery queryWithClassName:@"GameScore"]; [query getObjectInBackgroundWithId:@"xWMyZ4YEGZ" target:self selector:@selector(getCallback:error:)]; 30. keynote[@"boring"] = @YES; [keynote saveInBackground]; 31. [keynote saveEventually]; 32. [keynote deleteInBackground]; 33. [PFFacebookUtils logInWithPermissions:permissions block:^(PFUser *user, NSError *error) { if (!user) { NSLog(@"Uh oh. The user cancelled the Facebook login."); } else if (user.isNew) { NSLog(@"User signed up and logged in through Facebook!"); } else { NSLog(@"User logged in through Facebook!"); } }]; 34. parse.com