T DEV 600 Redditech
T DEV 600 Redditech
T-DEV-600
Redditech
Browsing app for Reddit
1
Redditech
language: Java/Kotlin (Android), React Native, C#/.NET (UWP)
• The totality of your source files, except all useless files (binary, temp files, obj
files,...), must be included in your delivery.
• All the bonus files (including a potential specific Makefile) should be in a directory
named bonus.
GENERAL CONSIDERATIONS
As part of this project, you will take on the role of a Software Architect.
Your main goal is neither reinventing the wheel nor writing numerous lines of code. On the contrary, your
main action is to understand, select and integrate a wide range of existing libraries.
Your code will be composed of two main parts: the first can be assimilated to glue in between of existing
functional components, the second part will be the so-called business logic. These two things (and a bit
more) should compose the requested project.
However, before embarking on such a project, we suggest you take the time to:
• Analyze each framework (and available libraries for each) at your disposal (See the Development
Environments section)
• Understand the pros and cons of each framekwork
• Analyze the API you’ll have to implement
• Choose the framework that suits you and the project best
There are several codeless tools to request APIs and check the proper formatting of re-
quests, responses status and data, . . . such as Postman, try it, it’s worth it!
1
PROJET DESCRIPTION
For this project, you are asked to create an application (mobile or desktop) using the Reddit API.
• Come with a user documentation in the form of a PDF (or equivalent) file
• Come with a user documentation in the form of an integrated tutorial (carousel at first launch, . . . )
• Have any other feature of your choosing not listed in the next section
Be careful, the Reddit API doesn’t like JSON much! Request bodies shouldn’t be passed
as JSON, or at least, not always :p
These are a few links concerning the Reddit API that you might find useful. You’re
welcome ˆˆ
- API base url
- Register a new App
- Endpoints documentation
- How to OAuth2 and more
2
MANDATORY FEATURES
You must create a browsing application with these features:
• Authenticate to the Reddit API with the OAuth2 protocol (See the dedicated section)
• Display the user’s profile. The bare minimum is to display the profile picture, username, and descrip-
tion
• Display posts from the subreddits the user is subbed to
• Filter the posts (ie. best, hot, new, top, random, . . . ). At least 3 different filter must be proposed
• Search for subreddits
• Display a subreddit basic information. The bare minimum is to display the name, title, number of
subscribers, description, and header image
• Display posts from a subreddit (You must also be able to filter the posts with the same restrictions as
mentioned above)
• Subscribe/Unsubscribe to a subreddit
• Display at least 6 of the user’s settings
• Be able to update at least 6 of the user’s settings
You must handle the pagination, called listings in the Reddit API. It will be checked during
the project review!
Be careful what subreddit you use during your tests, your app must be able to properly
display and play videos, gifs, images, . . . contained in a post!!
3
AUTHENTICATION WITH OAUTH
“OAuth 2.0 is the industry-standard protocol for authorization. OAuth 2.0 focuses on client developer
simplicity while providing specific authorization flows for web applications, desktop applications, mobile
phones, and living room devices. This specification and its extensions are being developed within the IETF
OAuth Working Group.” oauth.net/2/
Basically, OAuth allows third-party services/developpers (in this case you) to access protected content from
a service (Reddit here).
Reddit implements two Authorization grant, the Implicit grant flow and the Authorization Code flow. You
MUST use the Authorization Code flow for this project.
To handle OAuth, you are free to use any library or framework methods, but be careful, you must under-
stand what they do or you might end up not using the proper OAuth flow and having (random) errors. Or,
you can redo the wheel.
In front-end applications, for security reasons, you MUSTN’T have a client secret in your
environment or code. If this is the case, question your code and not the API or framework
you’re using.
4
USER INTERFACE AND EXPERIENCE (UI/UX)
The user experience that your application offers is an aspect that is just as important as its functionalities.
You should consider some ideas for the experience that you would like to offer to your users, and how your
- to be created - app interface will connect with this experience.
Each application is built according to its own set of rules and expectations. Creation of a visual identity, navi-
gation ergonomics, readability, intuitiveness are all non-exhaustive points that should be taken into account.
Consult the guidelines provided by the technology you chose. For instance, if you de-
velop an Android app, we recommend you to look at Material Design/UI
Be attentive to details. For instance, you can easily create Dark Patterns by mistake,
which isn’t ideal
Your application’s visual identity and user interface will be evaluated, just like the quality of the experience
it offers to the user.
As such, we will check if you respect the chosen platform’s guidelines (ie. Material Design/UI for Android)
such as:
5
APPLICATION TEST
As you know, any software project must be tested in order to make sure that it functions correctly and com-
plies with its scope statement.
You should set up a test strategy for your application. The completeness of your strategy will be taken into
account during the evaluation of your project.
You’re free to incorporate any test framework you want in order to make your test strat-
egy more complete.
DOCUMENTATION
It is important to take the time to define a simple - yet scalable - architecture without code duplication.
You should provide a clear and comprehensive documentation for your project, containing class diagrams,
sequence diagrams, components Life Cycle, . . . depending of the framework and libraries you chose
The goal is to have a document that helps newcomers to easily understand the project architecture and
more in order to reduce the project’s learning curve and ease communication between team members.
Thus, there is no need to make diagrams/schemas of the entire project, but rather to choose the important
parts that needs to be documented.
6
DEVELOPMENT ENVIRONMENTS
For this project, you have the choice to use one of three languages/frameworks detailed below.
It’s up to you to choose the libraries you want in order to meet the project’s needs (net-
work, data etc.)
If you choose to develop the project in the JVM environment on Android, you must respect the following
details:
• Your application must be developed in Java or Kotlin (Webviews and NDK Android usage prohibited).
• Your application must be targeted at the Android SDK API 29.
That means that a build.gradle file should be in the root of your repository.
Your project must use Gradle as its build automation system (to be built for Android).
The builds must be launched by using the Gradle Wrapper tool in the command line.
That means that an build.gradle file should be in the android directory at the root of your
repository.
7
That means that an redditech.sln file should be in the root of your repository.