Your SlideShare is downloading. ×

Creating native apps with WordPress


Published on

Talk at WordCamp Norway 2012 about how to create a native app with WordPress as a datasource. …

Talk at WordCamp Norway 2012 about how to create a native app with WordPress as a datasource.
Going into the XML-RPC, JSON plugins and how to manage the data in the backend.

The example had to be removed because of the company I worked for. Don't know why but as a result a smaller presentation.

Published in: Technology
No Downloads
Total Views
On Slideshare
From Embeds
Number of Embeds
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

No notes for slide


  • 1. Creating native apps with WordPress Marko Heijnen January 14, 2012 at WordCamp Norway
  • 2. Marko HeijnenFreelance developerMobile / WordPress
  • 3. History2006: Started with WordPress2009: Started with iOS development2010: First patch to WordPress ( 3.0 )2011: Combined iOS development with WordPress2012: First WordCamp presentation
  • 4. Lets talk mobile
  • 5. Mobile is the growing
  • 6. There is a change you get involved with it
  • 7. Native app vsWeb app/site
  • 8. Native vs mobileBuild a native app when: People are going to use it quite often ( daily basis ) Features that aren’t possible for web ( yet ) A lot of users request for it ( 10.000 > ) Customers really want an app
  • 9. We needa native app
  • 10. What does it mean for youYou need to communicate with another developerNeed to build an API that the developer can useSo you need to understand what a mobile developer wantsNeed to build additional fields in WordPress for informationthat the mobile app can use
  • 11. The API
  • 12. API of the appWordPress for iOS uses XML-RPCWordPress support it by defaultSupports: Blogger API, metaWeblog API, and the MovableType API
  • 13. Where can you find it/xmlrpc.php handles the request/wp-includes/class-wp-xmlrpc.server.php Registers all the default methods
  • 14. Methods for testing/** /** * Test XMLRPC API by saying, "Hello!" to client. * Test XMLRPC API by adding two numbers for client. * * * @since 1.5.0 * @since 1.5.0 * * * @param array $args Method Parameters. * @param array $args Method Parameters. * @return string * @return int */ */function sayHello($args) { function addTwoNumbers($args) { return Hello!; $number1 = $args[0];} $number2 = $args[1]; return $number1 + $number2; }
  • 15. How to get recent postfunction mw_getRecentPosts($args) { $this->escape($args); $blog_ID = (int) $args[0]; $username = $args[1]; $password = $args[2]; if ( isset( $args[3] ) ) $query = array( numberposts => absint( $args[3] ) ); else $query = array(); if ( !$user = $this->login($username, $password) ) return $this->error; do_action(xmlrpc_call, metaWeblog.getRecentPosts);
  • 16. How you can use it in your own way
  • 17. Create your own methodsadd_filter( xmlrpc_methods, add_own_methods );function add_own_methods( $methods ) { $methods[own.my_method] = own_my_method; return $methods}function own_my_method( $args ) { return $some_data}
  • 18. How does it look like
  • 19. Request<?xml version="1.0"?><methodCall><methodName>metaWeblog.getRecentPosts</methodName><params><param><value><string></string></value></param><param><value><string>username</string></value></param><param><value><string>password</string></value></param></params></methodCall>
  • 20. Response<?xml version="1.0"?><methodResponse> <params> <param> <value> <array><data> <value><struct> <member><name>dateCreated</name><value><dateTime.iso8601>20110904T18:15:26</dateTime.iso8601></value></member> <member><name>userid</name><value><string>1</string></value></member> <member><name>postid</name><value><string>1</string></value></member> <member><name>description</name><value><string>Welcome to &lt;a href=&quot;;&gt;WordPress Network Sites&lt;/a&gt;. This is your first post. Edit or delete it, then start blogging!</string></value></member> <member><name>title</name><value><string>Hello world!</string></value></member> <member><name>link</name><value><string></string></value></member> <member><name>permaLink</name><value><string></string></value></member> <member><name>categories</name><value><array><data> <value><string>Uncategorized</string></value></data></array></value></member> <member><name>mt_excerpt</name><value><string></string></value></member> <member><name>mt_text_more</name><value><string></string></value></member> <member><name>mt_allow_comments</name><value><int>1</int></value></member> <member><name>mt_allow_pings</name><value><int>1</int></value></member> <member><name>mt_keywords</name><value><string></string></value></member> <member><name>wp_slug</name><value><string>hello-world</string></value></member> <member><name>wp_password</name><value><string></string></value></member> <member><name>wp_author_id</name><value><string>1</string></value></member> <member><name>wp_author_display_name</name><value><string>marko</string></value></member> <member><name>date_created_gmt</name><value><dateTime.iso8601>20110904T18:15:26</dateTime.iso8601></value></member> <member><name>post_status</name><value><string>publish</string></value></member> <member><name>custom_fields</name><value><array><data></data></array></value></member> <member><name>wp_post_format</name><value><string>standard</string></value></member></struct></value></data></array> </value> </param> </params></methodResponse>
  • 21. XML-RPCCritics of XML-RPC argue that RPC calls can be made withplain XMLXML-RPC uses about 4 times the number of bytes comparedto plain XMLNeed a lot of code on the app sideIn the end the size of requests/responses do mather
  • 22. Is this the best way orare there alternatives?
  • 23. AlternativesJust XML instead of XML-RPCUse JSON
  • 24. What is JSONJavaScript Object NotationUse JSON as alternative to XMLIt is derived from the JavaScript scripting languageLightweight text-based open standard
  • 25. Why JSONLighter and faster than XMLJSON objects are typed Array, object, string, number, boolean and nullGreat libraries for mobile platforms iOS 5 does have native support for JSONEasy to parse on mobile platforms
  • 26. JSON Example{ "firstName" : "Marko", "lastName" : "Heijnen", "age" : 25, "address" : null, "newsletter" : false, "phoneNumber" : [ { "type" : "home", "number": "212 555-1234" }, { "type" : "fax", "number": "646 555-4567" } ] }
  • 27. WordPress doesn’t have native support (yet)
  • 28. Plugins you can useJSON RPC - API - RESTful - aware that these plugins aren’t up to date
  • 29. What do I use
  • 30. JSON APIGreat to use because of the use of hooksGood information on the plugin pageSimple backend interfaceI use a modified version of it Added consumer key/secret
  • 31. Interface
  • 32. How to implementfunction add_hello_controller( $controllers ) { $controllers[] = hello; return $controllers;}add_filter( json_api_controllers, add_hello_controller );function set_hello_controller_path() { return "/path/to/theme/hello.php";}add_filter( json_api_hello_controller_path, set_hello_controller_path );
  • 33. How to implement<?phpclass JSON_API_Hello_Controller { public function hello_world() { return array( "message" => "Hello, world" ); }}?>
  • 34. Important to knowOnly return data that is neededReturn as less HTML as possibleDon’t change the feed without notifying the app developerA call shouldn’t take to long, speed is everythingCache the data if possible Transients:
  • 35. Recap
  • 36. How to managemobile content
  • 37. Post typesAdd separate meta box for mobile content Even the ability to overrule the titleAdditional user capability, so not everyone can manage itMaybe even create a special post type for mobile content
  • 38. Special admin pageOnly for mobile configurationStore settingsStore default pages for mobile like privacy disclaimer
  • 39. Push notificationsCreate ability to send push notifications in a smart way Add to posttype Make a separate box on dashboard or admin pageYou can handle the sending yourselfOr use for example the services of Urban Airship
  • 40. Last wordWordPress is a CMSCan be used in a lot of waysSometimes look further then the plugin section
  • 41. Questions@markoheijnen /