Message:

Backendless Blog

Subscribe rss
Blog categories

This is the first post in a series where we plan to explore Backendless features. We are working to produce quick 2-3 minute videos to demonstrate the advantages and simplicity of the “no-backend” approach with the Backendless backend-as-a-service platform.

In the first video we review the process of creating your own backend with Backendless. Additionally, you can use the quick start guides for JavaScriptAndroid and iOS for more details.

Endlessly Happy Coding!

 

We are very happy to announce the new release of the Backendless service. The release is packed with very cool and exciting features as well as bug fixes and improvements. We will be posting detailed information for each new feature, but for now here is a brief overview of what you will find in the new release:

Analytics

In short, the analytics feature is simply awesome. You can do very detailed drill downs to determine how your application uses the backend, which services are used the most, how the usage of the app is divided between the clients, see the patterns of usage, etc, etc. The analytics charts are available through the Backendless Developer console. The information gathered by Backendless is divided into the categories of:

  • API Calls – you see the usage from the API method level to the aggregated “service-level” view
  • Users – provides the insight into active vs. registered users.
  • Media Streams – shows the history of live and recorded streams created by your client application
  • Messages – displays history of both publish-subscribe messages as well as Push Notifications.

Custom Domains

This new feature makes it possible for you to map your own domain name to your Backendless backend. This may be useful in the following scenarios:

  • Hosting – when you deploy your content to the Backendless File Service, you can serve it through a custom web domain.
  • Email communications – Backendless sends emails to your users for various scenarios: to confirm email address during the app registration process, to change password, etc. By default, most of the emails include links pointing back to our website. Using the custom domains feature, you can maintain more consistent branding for your app.
The custom domains feature is a part of the Backendless Plus package (see below).

Related Data Visualization

Working with related objects in our persistent storage just gotten so much easier now that you can actually see how objects you persist with the Data Service API relate to each other. Table views in the Backendless Console show related objects via links. The visualization works for both one-to-one and one-to-many relations: 

 

Additionally, the console provides a bidirectional mechanism for navigating relations from “parent” to the “child” objects and vice-versa.

Backendless Plus

The new release introduces a package we call “Backendless Plus”. It is a group of features which you can enable for your backend to take advantage of the following functionality:

  • Custom web page templates – your client-to-backend workflow may include interaction with web pages presented to the users of your application. For example, when a user registers for your application, he receives an email with a link to a page acknowledging that the email address is confirmed. Additionally, when the user requests password change, they are presented with a web page to change the password. Finally, when a user’s session with the application expires, he is redirected to a webpage. With Backendless Plus you can customize all these pages to maintain consistent look and feel and branding of your app.
  • Custom domains – Map a web domain to your file storage and use Backendless for website hosting. This new feature is described above.

Backendless Plus is available for $99/month and can be enabled through Backendless Console. See the Manage > Billing section for details.

ShowKit Integration

ShowKit is an SDK for mobile devices that enables audio/video conferencing and screen+gesture sharing. Developers can easily add video conferencing, screen sharing and hand gesturing features to the mobile apps by integrating the ShowKit SDK into their applications. The integration with Backendless makes it trivially simple to integrate ShowKit into your Backendless apps.
Once enabled, users of your app can start calling each other, initiate screen sharing sessions without any additional configuration or registration steps. We will be updating the documentation detailing the integration shortly.

As we are getting closer to the GA date, we are opening up our client libraries. It has always been the goal to make them open source and we are starting with the Backendless SDK for ActionScript. The library is now available on GitHub, which is the main repository for that code. As we make any changes, the code will be updated in the repository and the compiled library will also be available in the Backendless SDK download section on our site. We welcome any suggestions and improvements!

Posted in ActionScript

We just published an Android sample application to Google Play. The application demonstrates the usage of various Backendless APIs for some real-world use-case you may be implementing in your app. The application allows anyone to take a picture or use one from the gallery, upload it to the server and associate the picture with a point on the map (tag). Users can browse uploaded pictures by moving/zooming the map. For any picture/tag you can see a list of comments and submit your own comment as well. The application source code specifically demonstrates how to handle the following use-cases:

  • User registration and login
  • User login with Facebook or Twitter accounts
  • Retrieving a list of geo points and plotting them on the map
  • Taking a picture with the device’s camera
  • Selecting a picture from the device’s gallery
  • Uploading/Downloading images to/from Backendless
  • Establishing relational mapping between uploaded images and submitted comments
  • Using Data Service to submit and load user comments

You can find the app in Google Play if you search for “Endless Tagging” or simply follow the link below:
https://play.google.com/store/apps/details?id=com.backendless.examples.endless.tagging

The source code of the application is available in our GitHub repository:
https://github.com/Backendless/EndlessTagging-Android

Posted in Android, Examples

In this blog post we review the process of setting up and developing an iOS application capable to receive Apple Push Notifications. We also review the functionality of publishing a push notification through Backendless.

Creating App ID

  1. First we are going to create an App ID for the application which will receive Push Notifications. Login to Apple Developer Member Center. Click on “App IDs” in the “Identifiers” section. Use the plus sign “+” button to create a new ID:
  2. When prompted enter App ID Prefix. Make sure it is descriptive enough so you recognize it later when you return to the Member Center.
  3. Select Explicit App ID in the “App ID Suffix” section and enter the same bundle ID which you will be using in the application:
  4. In App Services select the services which the application will use and click “continue”:
  5. Make sure that Push Notifications are enabled and click “submit”. This will conclude the App ID creation for the app:

Creating Certificate Request

Push Notifications require a certificate which will be used on a device by the means of a provisioning profile. Also the same certificate (transformed to the Personal Information Exchange – .p12 format) will be used by Backendless to publish Push Notifications. If this makes little sense, do not worry, you will need to perform these steps only ones and then can move on to code and using the APIs.

  1. In order to create a certificate a Certificate Signing Request (CSR) must be issued. To create a CSR, open Keychain Access and select Keychain Access >> Certificate Assistant >> Request a Certificate from the main menu:
  2. Enter your email address and Common Name (leave the CA Email Address field empty), select “Saved to disk” and click “Continue”:
  3. Select a directory where to save the file and click Save.

Generating an SSL Certificate for Push Notifications

The CSR file created in the section above will be used to create an SSL Certificate. That certificate will then be used by Backendless to publish push notifications.

  1. Return to Apple Developer Member Center and select “All” under “Certificates”. Click the plus button “+” to add a new certificate:
  2. Select certificate type – there are two options Development and Production. For now select “Apple Push Notification service SSL (Sandbox)”:
  3. Select the App ID created earlier in these instructions:
  4. Next you will see the instructions for generating a CSR which you have already created by now. Click Continue to proceed to the next step.
  5. Select the CSR file created and saved to the disk earlier and click Generate:
  6. The certificate is ready now, click “Download” to download it:
  7. Add the certificate file to Keychain Access.
  8. Open Keychain Access and locate the certificate in the “My Certificates” section:
  9. Right click on the certificate and select the Export option:
  10. Save the certificate in the p12 format:
  11. Enter a password for the certificate. Make sure to make a record of the password – you will need to use it later in the instructions when you submit the certificate to Backendless:
  12. Enter your Mac OS X account password to confirm the action. At this point you have a certificate for Push Notifications.

Configuring Backendless App with the Certificate

Since Backendless provides the actual server-side integration for delivering Push Notifications for your application, it needs to have access to the certificate you created above. The steps below provide the instructions for uploading the certificate into Backendless:

  1. Login to Backendless Console at: https://backendless.com/develop and create/select an application which you will use on the server-side:

  2. Click Manage > App Settings. Locate the Mobile Settings section and upload the .p12 certificate created earlier. Make sure to enter the same password you used when created the certificate:

  3. Now your Backendless server is ready to publish Push Notifications.

Creating Provisioning Profile

  1. Login to Apple Developer Member Center and select “All” under Provisioning Profiles. Click the plus button “+” to create a new profile:
  2. Select the “iOS App Development” profile type:
  3. Click Continue. On the next screen select the App ID which was created earlier:
  4.  Click Continue. Select the users/certificates which will be included into the profile.
  5. Click Continue. Select the devices to include into the profile.
  6. Click Continue. Enter a name to assign to the profile and click Generate:
  7. Download the profile:
  8. Start XCode and open Organizer. Select the Provisioning Profiles section and add the profile you generated/downloaded:

Creating App in XCode

Finally all the setup is done and we can proceed to the fun part – creating an app in XCode and writing some code.

  1. Open XCode and create new “Single View Application”.
  2. Enter “pushNotificationSample” as the Product Name. Also provide your organization name and company identifier. Since the bundle ID we used when creating App ID earlier was “com.backendless.pushNotificationSample”, you should use “com.backendless” as the “Company Identifier”:
  3. Once the application is created, open Targets > Build Settings > Code Signing > Code Signing Identity and select the provisioning profile created earlier:



  4. At this point you should add Backendless SDK to your project. This includes adding Backendless library and its dependencies. Additionally, you will need to copy/paste Backendless Application ID and Secret Key into the code. For detailed instructions on how to do that, please follow the Backendless Quick Start Guide for iOS.
  5. Open AppDeletage.m. The following code registers the device with Backendless and Apple Push Notification Service:

    If the registration goes through, the following method is automatically called with the device token passed as the argument:

    Otherwise, if the registration fails, the following method is called with the argument of the underlying error:

    In case of the successful registration, the device is ready to accept published Push Notifications. When a notification is delivered to a device, the following method is invoked when the app is running.
  6. In order to send a Push Notification from a device, use the following code:

Publishing Push Notifications from Backendless Console

  1. Open Backendless Console at https://backendless.com/develop and select the Messaging section.
  2. Enter the text of the notification message in the “Message text” area, also make sure to specify the headers:
    1. “ios-badge”:”X”, where X is the number for the badge update
    2. “ios-alert”:”alert message text”
    3. “ios-sound”:”URL of the sound file”For a list of all supported headers, see the Publish Push Notification section in the documentation.
  3. Click the “iOS Devices” checkbox.
  4. Click Publish. The Push Notification will be delivered to all registered iOS devices:
  5. To see a list of the registered devices use the Devices tab. You can also send a push notification to specific devices. In order to do that, select the devices using the checkboxes and then click the “Selected devices” option under “Push Notification” section:

Blocks are a powerful C-language feature that is part of Cocoa application development. They are similar to “closures” and “lambdas” you may find in scripting and programming languages such as Ruby, Python, and Lisp. For a more in-depth review of blocks, see “a short practical guide to blocks”. A Backendless user has recently asked us about the ability to handle asynchronous APIs via block-based callbacks. Since this is a very reasonable request, we added support for blocks and it is available in the latest version of the Backendless SDK for iOS. Below is an example of using the new feature with the user registration and login APIs (btw, the feature is available for ALL Backendless APIs):

By the way, here is an example of code that does the same thing, but synchronously:

The example below demonstrates the usage of block callbacks with the Data Service API in order to:

  • Persist a complex type (an instance of class Weather)
  • Find an object by ID
  • Finding first and last instances
  • Deleting an object by its objectId

If you prefer to use the synchronous (blocking) API, the follow code does the same thing as the example above (but synchronously):

Enjoy!

Posted in Examples, iOS

Differentiating user behavior in an application by roles is a very common practice. Indeed, as long as you have different workflows in the application, it is likely each workflow would be associated with a specific user role. Take for an instance a mobile application to reserve a taxi. One of the user types (roles) is a client making a reservation, another one is a taxi driver for whom the reservation is dispatched to. Users in either role will have a separate login form, they will access the same data (reservation), but will see different aspects of it. Another example may be an application coordinating appointments with a gym’s private trainer. One user role in such an app is going to be the trainees coming to the gym for the workouts and another one are the trainers with whom people make appointments. In these apps users in different roles are likely to have different entry points into the application (different login forms) as well as different access level to the applications’ data.

Backendless simplifies roles-based access to data through a flexible permission system. Each role may have its own set of permissions either granting or denying access to various Backendless resources like data tables, messaging channels or media streams. The API provides a way to associate a user with a particular role. Once a user is linked to a role, any restrictions that the role has will automatically apply to the API operations made in the user’s session.

The example reviewed in this post demonstrates the roles-based data access concept. The example is an Android application. It defines two Backendless roles – ReadOnlyRole and ReadWriteRole. The first role has the read-only access to data, the second one has unlimited permissions. There are also two login forms – when a user logs in using the first form, his account is associated with the ReadOnlyRole. When the user logs in using the second form, the account is associated with ReadWriteRole. Once the user logs in, they see a screen where they can see and enter to-do tasks. Users who log in with the ReadOnlyRole will not be able to enter new tasks, while the other ones can create new to-do items. Please follow the instructions below to configure and run the example. The complete source code of the example is available in the Backendless GitHub account.

  1. Open Backendless Console to create a new application or select an existing one.
  2. Click the “Users” icons in the vertical menu on the left and select the “User Properties” section to adjust the properties. In this application we will use the “name” property as the identity:
  3. The next step is to define the roles for the application. To do that click the “Security & Restrictions” section. You should see a list of the built-in user roles available in the application. Click the “Add Role” button to add two user-defines roles: ReadOnlyRole and ReadWriteRole.

  4. Now create a data table for which we will adjust the role permissions. Go to the Data section and create the ‘Task’ table:
  5. Adjust the table schema by adding the ‘message’ column.
  6. At this point we have two custom user-defined roles and a data table. Now we need to modify the permissions policy between the roles and the data table. To do so, make sure you are in the “Schema and Permissions” screen (Data section). Click the ‘Roles Permissions’ link at the table ‘Schema and Permissions’ view. Override the default permission values so they look as shown in the screenshot below:
  7. Now that the server side is configured, all we need is to copy the application ID and the secret key into the applications’s source code (the values must be pasted into Defaults.java):
  8. Run the app. Use any arbitrary username and password – the app will automatically register the user if an account cannot be found. This is done to simplify the app and show the core of what we wanted to demonstrate without added complexity.
    1. Login to the READWRITEROLE form.
    2. Add a few todo tasks.
    3. Switch to the READROLE form and login there.
    4. You should see a list of tasks created in step B.
    5. Try adding a new tasks – you should see a toast notification informing about the error.

We start a new blog series called “Highlight Reel”. Today Backendless highlight reel comes to you from Irving, Texas. We have a chance to chat with EtherGloo founder Durga Dash about app development and his mobile application “SwarmLocal”.

Thanks for taking the time to chat with us, Durga. So, where are you located?

Irving, Texas

Good to be in neighborhood. Please tell us a little about yourself and your background. What were you doing before?

I did my Masters from Ohio State University in Electrical Engg. Also hold down a full-time job at a software company managing the network infrastructure for their datacenter.

Tell us about the app you have running on Backendless.

SwarmLocal was envisioned during the 2011 Occupy Wall Street protests and then the Arab Spring movements. The goal was to create a service that could leverage the power of the anonymous collective in close proximity by allowing real time communication. Inspired by the behavior of bees in a swarm and hence the name SwarmLocal. To that end the ‘swarms’ in SwarmLocal are mobile and the users anonymous. The app is free and available at AppStore and Google Play.

Cool idea. How long have you been developing apps? Is it your first app?

I have been developing apps for about 5 years. My first two apps were for Windows Mobile. Contraction Timer and BugPhone.

What was the biggest challenge in development?

One of the big challenges in development was being able to broadcast real time audio and video from mobile devices and having a backend that can scale to support it. There are not too many solutions out there currently.

      

Please take us through the process of decision making and options for your applications’ backend.

As far as being able to support broadcasting real time audio and video there not many existing services out there. Especially ones that integrate with native code on the different end user devices.

How did you come across Backendless BaaS platform?

I was attending a mobile developers meetup in Dallas and one of the presenters was Mark Piller. He did a presentation on Backendless backend as a service. I was at that time looking for a solution that would do the heavy lifting on the backend and let me focus on the user front end, so Backendless seemed like a perfect fit for my needs.

What Backendless features do you use in your application?

Currently we use the media services API to broadcast real-time audio and video from iOS devices.

What do you like the most in Backendless as a Backend as a Service platform?

  • Easy and elegant administration panel;
  • Well documented API’s and examples;
  • I was able to reach out to Backendless support and even make feature requests which were added pretty quickly;
  • At the end of the day it is very simple to use. And I like to use tools that make it really simple and do the heavy stuff behind the scenes.

Which issues do you expect to be covered by Backendless for you in the future?

From my perspective, I would like to see the Media Services API extended to more platforms and not just iOS. Also the ability to manipulate live streams to add/insert custom content from the admin panel.

What are your plans for the future?

  • Allow live streaming across multiple mobile platforms.
  • Give users the ability to encrypt their messages.
  • Spread out to other platforms, beyond iOS and Android.

What do you do when you aren’t busy working? Any favorite hobbies?

I have a three year old daughter who is a time sink. Other than that working on SwarmLocal and my new passion for boxing.

Do you have any advice for people who create their first apps?

I did write a blog that I hope will help other indie developers on their journey to writing their first app. It can be found here.

Well, best wishes, Durga. We appreciate sharing your thoughts with us.

P.S. If you have a production app running on Backendless, please drop us a line at community@backendless.com. We will be glad to present you in our highlight reel.

A quick heads-up for everyone – we just opened up a discussion forum available at: https://backendless.com/product/forum/.

The rule of thumb is to use the Community Support site for bug reports, feature and improvement suggestions and the use the forum for all other conversations.

 

Posted in Status

In this write-up we review a JavaScript application we recently ported to Backendless. The application is an “editable invoice” which automatically saves its data including invoice line items, customer address, your own address, invoice number, etc. It is a good example demonstrating how to work with “related persistent data”, which means you can save a hierarchy or objects containing other objects (the “Invoice” object, contains a collection of “Line Items”). The application also demonstrates the functionality of user registration and login, although we stopped short of connecting the invoices with the user accounts (which would be fairly simple to add).

The Editable Invoice application is an effort by noBackend.org which helps educating the developers about the advantages of BaaS. The vision is to provide a reference implementation with various backends.

The source code for the application has been push to our Github account.

Follow the steps below to setup and see the application in action:

  1. Register/login to the Backendless console. An application is created during the registration process or you can create one later at any time.
  2. Select an application once you login to console.
  3. Click the Manage icon. The App Settings screen will open up. The screen contains many useful settings and properties, but for now you will need only the Application ID and the Secret Key for the JavaScript clients.
  4. Keep the browser window open (you will need to copy/paste the ID and the Key from that screen) and open /editable-invoice/backendless/applogic.js in a text editor.
  5. Copy/paste the Application ID and Secret Key into the code on line 1:
  6. There is only one additional configuration step needed before you can run the application. Click the Users icon in the Backendless Console. The “User Properties” screen will open by default. Using this screen you can define the user properties which will be used by the Editable Invoice app. Click the “Add Custom Property” button and add the “login” property.
  7. Click “Save”. Make sure to select the “login” property as “Identity” by selecting the radio button for that property. The User Properties screen should look as shown below:
  8. Run the example. You can open the editable-invoice/index.html in a browser directly from the file system. Alternatively, you can deploy the entire application to a web server and load editable-invoice/index.html through a URL.

Try the following once you run the application:

  • Modify the invoice name by changing the main header at the top.
  • Modify the “Your Address” field.
  • Modify the “Your client’s address” field.
  • Add a new item to the invoice – enter item code, description, unit price and quantity. Click the “Add item” button.
  • Reload the application – you should see the invoice you just modified.
  • Check out the Sign Up/Sign In forms.
  • Login to Backendless Console and check the registered users in Data > Users, as well as data stored by the application in the “invoice” and “item” tables – the tables will be created automatically once you start using the example.

Reviewing Code

Below you will find some of the examples of using the Backendless API in the application:

  • Loading all invoices upon the start of the application. (/backendless/applogic.js, lines 3-15)

    Line 5 obtains a reference to the “invoices” data store in Backendless. The returned object provides access to the CRUD (Create, Retrieve, Update, Delete) operations for that table.
    Line 8 (find) sends a request to load all the previously saved invoice objects.
    Lines 10-13 request that the invoice objects returned by Backendless included references to the related “items” objects (an Invoice contains line items or just “items”).
  • Saving/Updating an Invoice. (/backendless/applogic.js, lines 39-62)

    Lines 3-7: check if the invoice has been previously saved. Uses the “condition” parameter where it specifies to search for the invoice by the “id” property.
    Lines 10-19: if the invoice is found (i.e. it has been previously saved), iterate through the items and assign the item’s “objectId”. In this example each “item” has an “id” assigned on the client-side (/shared/js/invoice.js, lines 14 and 28). On top of this, Backendless assigns its own ID to each saved object. That ID is stored in the “objectId” property. It is important to maintain consistency between the objects by correlating the IDs. This block of code accomplishes it for the save operation.
    Line 22: once the IDs are assigned, the entire invoice (with all the items) is saved.
  • Deleting an Invoice. (/backendless/applogic.js, lines 64-68)
  • User Registration. (/backendless/applogic.js, lines 82-93)

    Lines 2-5: Create a Backendless.User object which contains the values for all the user properties defined in step 7 above.
    Lines 6-11: Send a request to Backendless to register the user. The request is asynchronous with the Backendless.Async object handling the callbacks for success and error functions.
  • User Login. (/backendless/applogic.js, lines 94-104)

    Line 2: Send a login request to Backendless. The first argument must be a value for the property defined as “Identity” (see step 7 above).
Posted in Examples, JavaScript