Register
Submit a solution
The challenge is finished.

Challenge Overview

Project Overview

In this project, we will build RandivooPlus iPhone app that uses Bluetoo Low Energy (BLE) to interact with iBeacons (http://en.wikipedia.org/wiki/IBeacon). When someone walks towards a door that is equiped with an Estimote beacon (http://estimote.com), his/her iPhone will receive signals from the beacon and send out a command to open the door. The app has been built in previous contests, and we are adding more functionalities into the app at this stage.

Competition Task Overview

The goal of this contest is to follow the provided storyboard and implement the welcome screens, tutorial screens, and card screens.

Specific Requirements

  • The Target platform is iOS 7, and only portrait orientation should be supported.
  • Both 3.5 inch and 4 inch screens should be supported.
  • The business logic should be implemented, unless the web services are not provided yet.
  • All the screen transitions should be animated.

The new storyboard can be downloaded from the contest forum. All the screens in the storyboard are in scope. Here are some special explanations to the new screens:

Welcome Screen

When the app is opened for the first time, the welcome screens should be shown. 00-Welcome1.png will be shown initially, and user can swipe left or right to change to other welcome screens. At any time, user should be able to tap the "Sign In" button to go to the login screen in the existing app.

Tutorial Screen

When the user logs in for the first time, the tutorial screens should be shown. The 01-tutorial.png or 01-tutorial-alt.png will be shown first, and if the user taps the screen anywhere except the “X”, then 01-tutorial2.png or 01-tutorial2-alt.png should be shown. The difference between xxx.png and xxx-alt.png is that xxx.png is the default and is shown if the user's profile image cannot be found. xxx-alt.png is shown if the user's profile image can be found. (Please note that you may not find 01-tutorial2-alt.png in the prototype, but it is easy to figure out how it looks like by comparing 01-tutorial.png and 01-tutorial-alt.png.) If the user taps "X" or anywhere in 01-tutorial2.png, the tutorial screen should be closed and the card screen should be shown.

Card Screen

The card screen will replace the existing home screen in the app. See 02-active-alt.png for an example of a card, and see 01-tutorial2.png for the descriptions of card statuses. 

The user has two possible roles: Employee and Visitor. All users should have a notification button at the top left corner of the card screen. When this button is tapped, the notification screen will be shown. In this contest, we don't have APIs to fetch notifications, so the list is always empty. In other words, just show 04-1.png or 04-1-alt.png, and hide 04.png. 

Depending on the status, each card may have a delete button and/or a QR button. The delete button is shown when the card is inactive. The QR button should only be shown for visitors. When delete button is tapped, the delete screen (03.png or 03-alt.png) will be shown. When QR button is tapped, the QR screen (QR.png) will be shown. The QR image url is contained in the API response (See below).

The "Beacon In Range" button should be shown for admin. When this button is tapped for the first time in the app, 07_4_tutorial.png should be shown. When tapping anywhere in the screen, it should dismiss and the radar screen should be shown.

APIs

1. To get the list of cards, use the "/me/domains" service. Each card represents a domain. 

2. Each card (domain) may have one or multiple access reservations (ARs). Each AR describes the status of a domain (card). To get the list of ARs, use the "/accessReservations/now" service. Here is a sample response:

[{"name":"AccessReservation 209","id":209,"owner_id":3,"schedules":[{"name":null,"startDateTime":"2013-11-25T09:00:00.000Z","endDateTime":"2014-12-07T17:00:00.000Z","timezone":"UTC","id":14}],"tokens":[{"data":"e080966b04ffc01214274e32a735a1a46f15147371e30c487ac7d7f9b8250cca","tokenType":"hex","imageUrl":"http://s3.amazonaws.com/brivolabs-qrcodes/841791a3e6a91e55e073719ab992e1a9.png","id":196,"accessreservation_id":209}]},{"name":"AccessReservation 251","id":251,"owner_id":3,"schedules":[{"name":null,"startDateTime":"2013-11-25T09:00:00.000Z","endDateTime":"2014-12-07T17:00:00.000Z","timezone":"UTC","id":14}],"tokens":[{"data":"fe9fe40c65a8f1d6cd7f89a7c88c4ef4a9c331043d69c4477d4868fcebabcaf7","tokenType":"hex","imageUrl":"http://s3.amazonaws.com/brivolabs-qrcodes/9efb82354b7ea31674d93d7e6f070662.png","id":238,"accessreservation_id":251}]},{"name":"AccessReservation 272","id":272,"owner_id":3,"schedules":[{"name":null,"startDateTime":"2013-11-25T09:00:00.000Z","endDateTime":"2014-12-07T17:00:00.000Z","timezone":"UTC","id":14}],"tokens":[{"data":"cd8286b9ac9c7fcdd363f5f438a6bacbdbb96daadc72bdf41d74b1d46fd90d42","tokenType":"hex","imageUrl":"http://s3.amazonaws.com/brivolabs-qrcodes/f8c21ea89673b5767477b04276e2c772.png","id":260,"accessreservation_id":272}]}]

In the response, the first record is the most recent status. If the card has a QR button, use the imageUrl in the first record.

3. Merge accounts. If the app is opened by custom url scheme, and the url contains a token. Then do the following:

a. Check if the token exists in one of the ARs returned by /accessReservations/now. The "data" field represents the token.

b. If the token doesn't exist, the app should attempt to merge the accounts.  This is done with a PUT to the endpoint /domainAccounts/merge. Here is an example payload:

{
  "token": "1935454e1b52b7cb28a536b988ccfb172d5296648eb9c6635fc543e570c19d2f"
}

4. To find out the role of the user, use the "/domainAccount/:domainAccountId/roles" service. You will know whether the card should say "Visitor" or "Employee" based on the result.  If "super user" is returned, then it will be an Employee if it is a "user" then they are a "Visitor".

5. The photo url and name of person can be obtained from /me



Final Submission Guidelines

1. Updated source code

2. Deployment guide

ELIGIBLE EVENTS:

2014 TopCoder(R) Open

Review style

Final Review

Community Review Board

Approval

User Sign-Off

ID: 30042880