
Hello.
March 27, 2016 ended with VK Mobile Challenge.
Terms of the contest can be read
here , and everyone who is interested in the history of participation, welcome under cat.
Entry or how it all began
One day at the end of February, scrolling through the tape of a mobile application of a single IT site, I came across a post that described that VKontakte is launching a competition of mobile applications with a prize pool. Following the link, I saw a description of the requirements and conditions, after reading which there was a strong desire to participate.
In the morning they were written off by our team. At that time, all the experts were on the projects, there were no free resources. After talking, we decide that I will write the project alone, but in case of some unforeseen difficulties, colleagues come to the rescue.
')
Determine the direction
The developers were offered several directions to choose from:
- Conducting live broadcasts from mobile devices.
- Manage community managed VKontakte.
- Manage photos of VKontakte and synchronize them with a gallery of mobile devices.
- Marketplace based on VKontakte products service.
- View video VKontakte: catalog, recommendations, playlists, search.
- Interaction with VKontakte communities and events.
- Editing videos and publishing VKontakte.
- Document management VKontakte with the ability to conveniently preview files (for example, to read books).
After entering the VKontakte products, it was interesting to try them in action. I decide that I will write an application using commodity methods. Everything was complicated by the fact that until this point I had never opened a section for developers and knew absolutely nothing about the VKontakte API or VK SDK.
The development remained a month. In all honesty, I would say that there were huge doubts whether one would have time to implement such a considerable amount of code.
From the environment I had - moqups.com, a deployed redmine of our team, a git repository and AndroidStudio.
On the night of February 26th and 27th, armed with a pack of paper and black gel pens (I love black gel pens :), as well as a coffee bucket, I proceeded to primary planning and design. After several hours of active absorption of the API description, the first task in redmin was born:

After two weeks of active development, a second task appeared with the name “backlog”, where I wrote down all the descriptions that came to my head. I confess - most of the plans were not implemented. Banal lack of time.
SpoilerLooking ahead, I’ll tell you that the application did come out on time, I was able to submit the application. But it was, I confess honestly, oh, how difficult.

The idea of ​​the application was this - to give the user who has a group with the included goods the ability to fully edit / administer both the group data and the products, managers, participants.
Then I did not know what surprise awaits me. Ironically, just a week or two before the end of the contest, the official android client is updated, and users get the opportunity to edit their groups. Ce la vie :) This fact did not grieve me at all, but on the contrary gave me strength and confidence that we are on the right path. Development continued.
Separately, I would like to touch on the visual component.
With a sense of beauty and beauty, I am on you (somehow even showed in my articles how bad everything is :(.) But what’s really there ... If we draw an analogy with bears and ears, my sense of beauty met a connecting rod in December. And apart from the letter designations it no longer manifests itself ...
Of course, this could not affect the usability of the application. The focus was on the functional part. Ideally, a tool was developed, not a mass application. And, to my deepest regret, there was absolutely no time left. There was a choice - either to start designing the interfaces, but then it is most likely not to have time, or to continue the development of the functional part. Development continued.
With your permission, we will forgive the application some interface flaws. Fortunately, while these lines are being written, the UI recycling process is already running.
What do we have in the end?
The end of applications acceptance was determined on March 27, 2016 at 23:59 (Moscow time).
Saturday 26 and Sunday February 27 were highlighted for testing and global edits. This is where the team comes to the rescue. Collected apk, sent to colleagues. For me, these two days have merged into one endless marathon. Over the weekend, managed to sleep just a few hours. But here comes the evening of the 27th. All is ready. I collect the archive, describe the idea and send it. Everything. Point. We had time. We all could.
Difficulties and their solutions
Thank you if you have read this far.
Since for me this was the first serious experience in working with the VKontakte API, I would very much like to share solutions to the difficulties that we have encountered during the entire month of development.
1) Certificate fingerprint.
For a long time, they could not launch an application that was built on another machine. As it turned out - the case in the debug fingerprint. Now it’s so obvious to us that our mistake makes us smile.
Each computer has its own debugging imprint, if you are developing applications for the VKontakte team, do not forget to specify all the developers' fingerprints in the settings.
Here:

2) Each time you try to log in, the application requested access.
Having collected a test case that the VKontakte developers generously put in the Android SDK, it became clear what the problem was.
In the documentation for android, I did not find a description of this method:
VKSdk.wakeUpSession(this, new VKCallback<VKSdk.LoginState>() { @Override public void onResult(VKSdk.LoginState res) { switch (res) { case LoggedOut: startActivity(new Intent(SplashActivity.this, LoginActivity.class)); finish(); break; case LoggedIn: Intent intent = new Intent(SplashActivity.this, ListGroupsActivity.class); startActivity(intent); finish(); break; case Pending: break; case Unknown: break; } } @Override public void onError(VKError error) { } });
This method was called on onCreate SplashActivity.
3. Carefully read the description of the methods in the documentation and especially the
Result block.
A method can return a collection of entities, and can return an array of entities. The first few days I very often came across an incorrect interpretation of the result of the query.
Conclusions and results
The application was written by one person in 25 days. On weekdays, I sat at the project in the evening, but often lingered until the morning. All weekends, from morning to evening-night, went to the project (very grateful to my spouse for the fact that she understood me and helped and supported me as much as possible). On average, 7 hours a day.
In order to start using the application, you must be the owner or member of the public managers with the goods.
The application can:
a) Edit group information - an analogue of the “Community Management” page;
b) Managing the list of participants, managers;
c) Black list and ban settings management;
d) Managing the list of links
d) Search and filter products
e) Editing / adding / deleting goods from both the public and from the collection of goods
g) Editing / adding / deleting collections
h) Upload and delete photos from product and collection covers.
In general, we were very pleased with the work done. This is a huge experience of extreme programming, when there is no right for a mistake and a delay in the development process.
If you have any questions, suggestions, suggestions, criticism - with great pleasure I will listen!
Thanks for attention.
All good!