parse-android-test-app
Test Android application for Parse test server.
1. Information
1.1. Features
Fully working communication with Parse test server:
- managing simple entity (Note);
- sync data with server;
- restore data from server;
- sign up from application with email address or Facebook account;
- sign in to server with email or Facebook.
1.2. Not handling exceptions
- Internet connection unavailable status;
- Parse Server connection unavailable status.
2. Parse initialization
2.1. Application class
private fun initializeParse() {
val serverAddress = "SERVER_ADDRESS"
val applicationId = "APP_ID"
val clientKey = "CLIENT_KEY"
ParseApi.initialize(this, serverAddress, applicationId, clientKey)
ParseAuth.initialize(this)
}
2.2. ParseApi class
fun initialize(context: Context, serverAddress: String, applicationId: String,
clientKey: String) {
val parseConfig = Parse.Configuration.Builder(context)
.server(serverAddress)
.applicationId(applicationId)
.clientKey(clientKey)
.build()
Parse.initialize(parseConfig)
}
2.3. Requiring parameters
Name | Description |
---|---|
SERVER_ADDRESS | Address of Parse server in your network |
APP_ID | Parse server app id |
CLIENT_KEY | Parse server client key |
2.4. Parse API
Parse API provided methods for managing entities in app.
2.4.1. Save all notes
fun saveAllNotes(notes: List<Note>, errorOnSave: (e: Exception) -> Unit) {
...
}
Argument | Type | Description |
---|---|---|
notes | List<Note> |
Notes to save |
errorOnSave | Function |
Error callback |
2.4.2. Restore all notes
fun restoreAllNotes(notes: List<Note>, afterRestore: (e: Exception?) -> Unit) {
...
}
Argument | Type | Description |
---|---|---|
notes | List<Note> |
Notes in local database |
afterRestore | Function |
Restore callback |
2.5. Parse Auth API
Parse Auth API provides methods for authorization with email or Facebook account.
2.5.1. Authorization check
fun isAuthorized() = ParseUser.getCurrentUser() != null
2.5.2. Register with email
fun register(username: String, email: String, password: String,
afterLogin: (e: Exception?) -> Unit) {
...
}
Argument | Type | Description |
---|---|---|
username | String |
Name |
String |
||
password | String |
Password |
afterLogin | Function |
Login callback |
2.5.3. Log in with email
fun logInWithEmail(email: String, password: String, afterLogin: (e: Exception?) -> Unit) {
...
}
Argument | Type | Description |
---|---|---|
String |
||
password | String |
Password |
afterLogin | Function |
Login callback |
2.5.4. Log in with Facebook
2.5.4.1. Log in method
fun logInWithFacebook(fragment: Fragment, afterFacebookLogin: (success: Boolean) -> Unit) {
...
}
Argument | Type | Description |
---|---|---|
fragment | Fragment |
Fragment (can be replaced to Activity) for user data request |
afterFacebookLogin | Function |
Login callback |
2.5.4.1. Handling onActivityResult
fun handleOnActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
...
}
Argument | Type | Description |
---|---|---|
requestCode | Int |
requestCode from request |
resultCode | Int |
resultCode from request |
data | Intent |
data from request |
2.5.5. Logout
fun logout(afterLogout: (e: Exception) -> Unit) {
...
}
Argument | Type | Description |
---|---|---|
afterLogout | Function |
Logout callback |
3. Database
ORMLite. More on official site.
4. Data structure
This section contains full list of entities using in app.
4.1. Entity
Base class for all database entities.
abstract class Entity(
@DatabaseField(generatedId = true)
var id: Long = -1
)
4.2. Note
class Note(
@DatabaseField
var title: String? = null,
@DatabaseField
var subtitle: String? = null,
@DatabaseField
var parseObjectId: String? = null,
var positionInList: Int = 0
) : Entity() {
...
}
4.2.1. Save note
From Note class method:
fun save() {
DatabaseFactory.get().saveNote(this)
}
Example:
val newNote = Note(title, subtitle)
newNote.save()
4.2.2. Delete note
From Note class method:
fun delete() {
DatabaseFactory.get().deleteNote(this)
}
Example:
val note = notes[notes.size - 1]
note.delete()
4.2.3. Get all notes from database
From Note class method:
fun getAllNotes() = DatabaseFactory.get().allNotes
Example:
val notes = Note.getAllNotes()
4.2.4. Delete all notes from database
From Note class method:
fun deleteAllNotes() {
DatabaseFactory.get().deleteAllNotes()
}
Example:
Note.deleteAllNotes()
4.2.5. Get ParseObject for note
From Note class method:
fun getParseObject(globalAccess: Boolean = true, user: ParseUser? = null): ParseObject {
...
}
Example:
val parseNote = newNote.getParseObject(false, authUser)
4.2.6. Initialize note from ParseObject
From Note class method:
fun restoreFromParseObject(parseObject: ParseObject): ParseObject {
...
}
Example:
for (obj in parseObjects) {
val note = Note()
note.restoreFromParseObject(obj)
...
}
5. Facebook install
5.1. Resources
5.2. Usage
In preferences.xml
replace this values to own analogues:
<string name="facebook_app_id">[APP_ID]</string>
<string name="fb_login_protocol_scheme">fb[APP_ID]</string>
6. Permissions
<uses-permission android:name="android.permission.INTERNET"/>