Kinvey V3.3 for iOS Review
Kinvey is an enterprise MBaaS (mobile backend as a service) platform for app development that was introduced in 2011. Similar to other MBaaS solutions, Kinvey provides a system for linking an extensive range of backend services such as cloud and file storage, authentication, push notifications, app usage, encryption, and mobile analytics within the user’s mobile and web apps. As is standard for most MBaaS offerings, Kinvey users can manage these features via a console.
Kinvey enables native, hybrid and mobile web applications. Though our focus in this review is on iOS, it is worth mentioning that it supports native (Apple iOS and Google Android) and cross-platform (Xamarin Studio) development options, providing native toolkits and SDKs for each. Kinvey also has a REST API, which gives developers the ability to use any platform of choice.
Kinvey provides four product variations:
For this review, we tested Kinvey’s free Developer Edition for iOS.
Kinvey, Developer Edition (hereafter Kinvey) offers most, if not all, of the essential and common features we have come to expect from an MBaaS provider, and also supports dynamic links, an additional feature that helps it stand apart from competitors. This review will focus primarily on the functionality and quality of the essential and common features, though we’ll also have a look at the additional features.
Essential FeaturesAuthentication and User Management
Kinvey, which can handle authentication directly, has really made things simple for the user. Setup requires a scant few minutes of consulting the iOS documentation and you’re ready to go, and implementing every aspect of this feature is made easy.
Other supported authentication handling methods include Active Directory, LDAP and SAML-WRAP, and OAuth support allows for Twitter, Facebook, Google+ and LinkedIn identities.
Kinvey states that its cloud caching functions behind the scenes. So what does this mean? Optimally, it would enable quicker responses to user requests.
Using the Data Sync feature, Kinvey supports caching and offline support features for apps. This is something that Firebase Spark also offers but we found lacking in others, for example, Backendless Cloud. When the app is offline, data is pulled from the cache, and when online, it is pulled from the network and stored in the cache. In the event of a conflict, there are settings to decide whether the client or server wins, and Kinvey’s business logic can be used to create custom conflict management policies.
Kinvey allows users to store and retrieve binary files up to 5TB in size (so they’re ready for the future, because- well, good luck retrieving a 5TB file on a mobile device), in image, video or some other application-specific format.
Users can request as many files as they desire with one query but downloading the specific file requires the specific download URL from the previous request. This is a two step process: (1) request the files, and (2) grab the download URL and request the download URL for the specific file. To download, the file download URLs will have to be requested individually.
Kinvey’s data store is based on MongoDB, which is a NoSQL document store. As such, data modeling should be carefully considered as decisions on data normalization and relationship between entities can have a huge impact on the performance and complexity of the app.
Data can be added, updated, and deleted using the Kinvey console, REST API or a demo application. For safekeeping, users can only delete a collection using the REST API or demo application, and authenticate using the master secret key.
Kinvey’s business logic is a node.js code execution runtime that handles requests to the backend. According to Kinvey, their service will allow the user to focus on the business logic specific to their app while “Kinvey handles the work of receiving, parsing, and routing requests, connecting to and querying data stores, and enabling mobile-specific functionality.”
In testing the functionality, this was found to be an honest assertion on their part. Working through the Kinvey console on a new project, it was possible to implement some simple code in less than an hour. Going beyond the Developer Edition for a moment, it is also clear how it would be a huge time saver if a user had multiple apps all with the same simple business logic.
After enabling push notifications capabilities in Xcode, creating a push notification certificate on Apple Developer Portal, and uploading it through the console, Kinvey is ready to manage alert notifications. Users are not pre-categorized, which is something some of Kinvey’s competitors do. Conditions have to be set on the console for each message in order to segment the targeted group of users. They use key/value operations to filter the user table, so they could be grouped, for example, by device type or engagement level. To create more advanced segmentation, user data has to be extended.
Kinvey transmits data through https connections, as should be expected. Sensitive information is stored using different ciphers. Passwords in particular are salted and hashed with SHA-1, which does not provide optimal security. While it is stronger than, for example, MD5 that is used by Backendless, it does not match the security offered by Firebase’s encryption using scrypt.
For local storage, the Kinvey iOS library uses Realm and relies on its encryption support to encrypt database files on disk. An encryption key must be passed at the library initialization. Alternatively the key can be generated and managed automatically.
Kinvey provides flexible data access control, which can be set through the console settings at the collection level. Access can also be overridden at the entity level.
The Kinvey dashboard offers simple analytics, including features such as tracking the number of users making requests to the app backend, the number of users registered with the app, data and file storage, and displaying space utilized by the app backend. It also tracks the API calls to the app backend in a 24 hour period.
Kinvey supports very basic geolocation, allowing the storage of location points and queries using MKCircles and MKPolygons.
The code and sample app don’t appear to have been updated for some time, so this feature doesn’t seem to be one of Kinvey’s current priorities in terms of development effort.
Kinvey also includes the following additional features, which are not generally thought to be integral to an MBaaS and were not tested for this review. Some of these features are definite value adds that enhance an MBaaS product.
The platform can handle static data or user input data, but developers need to use the Kinvey Data Link protocol if they want to bring in data from external sources. Different types of data source are supported, such as SOAP, REST and SQL. Kinvey Data Link’s primary utility is to allow data to be used from an Enterprise data store and for the sharing of Enterprise data sources between apps; otherwise, Kinvey is unable to handle live data from multiple sources. A number of data sources are supported such as Microsoft Dynamics, Oracle, and PaaS, and custom data sources are supported as well. The Enterprise tier supports Kinvey business logic integration, helping to centralize your app’s code.
Kinvey provides an iOS starter app, which had some good examples of where to start with their product. For our review, however, we created our own test app that includes simple login functionality, takes in some simple data, and slightly modifies that data before returning it. After referring to the documentation, it was easy to get the app started within five minutes, and all it took was to drop in a few lines of code.
The iOS library includes a mix of Objective-C and Swift code, though it feels more Swifty than, for example, the IOS library for Backendless. Installation can be done through Cocoapods and the main pod depends on third party libraries, such as ObjectMapper, PromiseKit, and Realm.
The Kinvey console is simply designed and intuitive to use. After just a couple of clicks, the test app was up and running. Looking through the guides for Xamarin Studio and Android app integration, we felt confident that they would be similarly easy to setup.
Performance – Response TimePerformance was tested by trying to ascertain how many responses per minute the database can process and respond with information to complete a request. We gauged Kinvey’s response time by retrieving 150 data items using 100 concurrent users. In comparing Kinvey’s performance with some other MBaaS solutions, it averaged 46 responses per minute for data downloads, which was slightly poorer than Backendless Cloud (56 responses/min) and lagged well behind Firebase Spark (77 responses/min) and Oracle Mobile Cloud Service (105 responses/min), which, it should be said, is an enterprise solution.
Performance – ThroughputWhen multiple users connect to a single server, they share the same bandwidth for downloading content. In measuring throughput to help us understand the rate at which data is transferred, we had 200 concurrent users download a 1 MB image.
In direct comparison to other MBaaS solutions, Kinvey (59.2 MB/s) was pretty much on par with Backendless Cloud (58.4 MB/s) while outperforming Firebase Spark (50 MB/s). None of these MBaaS offerings were able to keep pace with enterprise-focused performance of Oracle MCS (73.6 MB/s). With this in mind, it would be interesting to test Kinvey’s enterprise-level solution to see how significantly the performance increases from Developer Edition.
Testability, defined by applying the concepts of observability and controllability, allows the Quality Assurance team to identify areas to test and, for each feature, what tests can be performed, and how to perform those tests. If the testability of the SDK is high, then the probability of finding faults in the system by means of testing is greater. This also helps us gauge which tests provide us with the most confidence and correctness.
Kinvey has a very clean web layout that provides a fast visual response that is superior to, for example, Backendless Cloud whose console takes a couple seconds on average to respond when navigating. This helps with testing as QA has an easier time finding the needed information in a user-friendly and responsive environment instead of navigating around, not knowing if you’re in the right place or having to wait a couple seconds too long for everything to load.
With several login methods, testing is more time consuming as testers will need to ensure all the supported social media accounts are supported as claimed. That being said, this is in line with other MBaaS offerings on the market.
Administrators can suspend, lock down, destroy, or reset passwords using the Kinvey console as well as set user permissions (read, shared, private or public). This makes testing easier because the tester can then easily test all the different user permissions by changing the setting from the console.
Time is key when it comes to testing so Kinvey’s use of a collection structure to store data is a strong positive as manipulating data at run time is less time consuming in a collection when compared to a traditional data table.
Kinvey also allows a REST API query to search for data on the console. Using a REST API is better for testing as we can test the request and response with any open source REST API tool and there are so many free tools out there to choose from. If you want more detailed information, there are also many of the paid versions that offer it.
When requesting a file, the SDK returns a response with a download URL to the file location. You can use the Kinvey console, REST API to get the response with the download URL, then download the file using a browser or using a demo to extract the download URL and automatically download the file.
An image URL can be tested by clicking on the image in Kinvey storage and comparing the URL with the response from the file request.
Download speed can be tested by using curl to measure the response time and file size.
This is a standard feature among MBaaS products, and having this common feature makes testing easier without going having to go through a learning process.
There is no way to test the location services without connecting the geo point with a map. The data for location services is being saved as a collection so we can verify that the data is being saved correctly but that’s about it. In comparison, Backendless Cloud’s console has a map to input the geolocation, which make testing somewhat easier.
Kinvey includes cloud caching features that use data links to their legacy system. Cloud caching is based on the TTL (Time to Live) set on the console. To test this, we can update the TTL from the Kinvey console and then request the same piece of data via the Kinvey data console, REST API or demo application to see if the new information is requested from the legacy system.
Having the ability to change TTL makes testing more efficient, because we can change it to a shorter time to minimize the time we need to wait. And we can also change it to a longer time to make sure the cache data is presented as expected. For example, to test TTL on caching, a request can be made to the server before the cache expires to make sure the new changes are not in the response since the cache has not expired. On the other hand, a request can be made to the server after the cache expires to ensure the new changes are in the response.
Kinvey allows users to use different data sources such as Microsoft Dynamics, PeopleSoft, Oracle, Salesforce, Foursquare, Google Places, PaaS, SharePoint, Microsoft SQL Server, and REST Data. After the data link connection is established and the HTTP REST service is implemented, users can access the data via the Kinvey console, REST API or via the demo application.
Having many data link sources can make testing more time consuming as we need to ensure Kinvey supports different data structure from different sources, and to ensure the data is accurately communicated from the source.
Overall, we like the testability of Kinvey quite a bit as it is easy to use and powerful enough to run more tests than needed. This makes a Quality Assurance team’s job easier, and this alone could make Kinvey preferable to a tester than a less testing-friendly competitor.
Kinvey makes deployment very easy. In fact, as there is no real deployment, users can have multiple versions and name these versions QA, Production, or Development, and migrate the data as time goes on. Alternatively, there can just be one version that can be renamed once the app is in production. However, there are no export and import features so a copy of the previous version cannot be saved and restored later if something goes wrong.
Kinvey’s Developer Edition is a good starting point for a small business until the app requires the more robust Startup Edition. Larger businesses requiring more robust deployment features should look to Kinvey’s Business and Enterprise Editions.
Kinvey provides extensive documentation including guides and tutorials that are generally easy to understand, with enough examples and explanations to provide a solid understanding of Kinvey’s product and how to use it.
Kinvey has a well-organized community forum with a wide array of topics. The response times to questions on the community forum were observed to be twenty-four hours or less. However, the quality of the responses seemed a bit lacking at times. This could often be partially attributed to a lack of specificity on the part of the inquirer, but the responses from the Kinvey moderators tended to be brief, usually limited to a few lines. Additionally, once a question had been answered, the moderators moved on to answer other questions, even if the answer was found lacking. This is not to say that the responses were incorrect. But people often need handholding and a back and forth discussion, especially when they are new to something, so that they can properly understand how to fix problems on their own.
Questions regarding Kinvey submitted to Stack Overflow have slower response times, but Kinvey moderators still make efforts to get to them, as do other individual contributors with Kinvey product experience.
Kinvey’s customer support is tied to their pricing scheme, with each ascending tier offering more services. At the most basic level, Kinvey only offers forum support, and at its highest level, it offers immediate responses to all high severity issues as well as an account manager to help with issues that are specific to individual projects. So, with the free Developer Edition, users are limited to the forum.
Kinvey’s Developer Edition delivers a good product despite the limitations of the free product. It offers just about every feature one would expect from an MBaaS, and implementing the features didn’t require an excess effort that would might make a higher tier more attractive.
As a side note, Kinvey (like its competitor Firebase) has a project cost estimator and MBaaS savings calculator on their website. This feature was found to be transparent and customizable, which helps to produce surprisingly accurate project cost estimates. However, its estimate of Kinvey’s cost savings, if one were to use their MBaaS, may be a bit too optimistic depending on your specific use case.
The Final WordAn MBaaS works behind the scenes to make the developer’s life easier and the product cheaper to produce. And in many ways a service like Kinvey will have failed if the end user experience is discernably different than if you had decided to go without it. To this end, Kinvey has succeeded. All the features one would expect to see in an app are there and they work just as smoothly as expected.
Given the lack of diagnostic tools and support, it would be difficult to make a sophisticated app, i.e. one that has multiple features and a complicated backend, with the Developer Edition. The free tier SDK might be best used with an app that will see only limited use. In addition to this, being limited to one environment makes a bump-up to a higher tier necessary when the app goes live and a testing and live environment alone create a need for multiple environments.
The following is our rating scorecard for Kinvey: