Skip to content

hansemannn/titanium-parse-live-query

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

52 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Parse Live Query in Titanium

Use the Parse & Parse Live Query iOS and Android SDK's in Axway Titanium! Read more about the Parse Live Query API in the official native repositories:

Warning: While iOS is ready for production, Android is highly dependent on community contributions. Submit a pull request to expose new features, e.g. query subscriptions.

Requirements

  • Titanium SDK 12.0.0+

Usage with Ti.Facenook

If you use this module together with Ti.Facebook, you need to remove the Bolts.framework from

<project>/modules/iphone/ti.facebook/<version>/platform/Bolts.framework

since it is already bundled with Ti.LiveQuery. Remember: In case you remove Ti.LiveQuery, put the framework back in our replace it with a fresh module version that contains the framework.

Setup

iOS

No additional setup required.

Android

Add the following to the <android> manifest section of the tiapp.xml:

<application ...>
  ...
  <meta-data android:name="com.parse.SERVER_URL" android:value="YOUR_SERVER_URL" />
  <meta-data android:name="com.parse.APPLICATION_ID" android:value="YOUR_APP_ID" />
</application>

API'S

Root-Module

Methods

initialize(args: Dictionary)
  • applicationId (String)
  • clientKey (String)
  • server (String)
  • localDatastoreEnabled (Boolean)
createClient(args: Dictionary) iOS only
  • applicationId (String)
  • clientKey (String)
  • server (String)
saveObject(args)
  • className (String)
  • parameters (Dictionary)
  • callback (Function)
clearAllCachedResults()
objectWithClassName(className) iOS only
becomeInBackground(args) iOS only
  • sessionToken (String)
  • callback (Function - optional)

Constants iOS only

EVENT_TYPE_ENTERED
EVENT_TYPE_LEFT
EVENT_TYPE_CREATED
EVENT_TYPE_UPDATED
EVENT_TYPE_DELETED

Client iOS only

Methods

reconnect()
disconnect()
isConnected() -> Boolean
subscribeToQuery(query)
  • query (Query)
unsubscribeFromQuery(query)
  • query (Query)

Events iOS only

subscribe
  • query (Query)
unsubscribe
  • query (Query)
event
  • eventType (EVENT_TYPE_*)
  • object (Object)
  • query (Query)
error
  • error (String)
  • query (Query)

Query iOS only

Initializer (createQuery(args))

  • className (String)
  • predicate (String, optional, e.g. name = "hans")
  • predicateArguments (String, optional, e.g. myUsers)

Note: When using predicateArguments, you write a template based placeholder inside the predicate parameter and fill it with the arguments passed in predicateArguments, e.g.

var query = LiveQuery.createQuery({
  className: 'User',
  predicate: 'userId in %@'
  predicateArguments: users // an array of users
});

Note: If you use predicates, you may constraint your query for additional where clauses.

Methods

whereKeyContainedIn(key, array) -> Query
  • key (String)
  • array (Array)
whereKeyNotContainedIn(key, array) -> Query
  • key (String)
  • array (Array)
whereKeyContainsAllObjectsInArray(key, array) -> Query
  • key (String)
  • array (Array)
whereKeyEqualTo(key, object) -> Query
  • key (String)
  • object (Any)
whereKeyNotEqualTo(key, object) -> Query
  • key (String)
  • object (Any)
whereKeyLessThan(key, object) -> Query
  • key (String)
  • object (Any)
whereKeyLessThanOrEqualTo(key, object) -> Query
  • key (String)
  • object (Any)
whereKeyGreaterThan(key, object) -> Query
  • key (String)
  • object (Any)
whereKeyGreaterThanOrEqualTo(key, object) -> Query
  • key (String)
  • object (Any)
whereKeyExists(key) -> Query
  • key (String)
whereKeyDoesNotExist(key) -> Query
  • key (String)
includeKeys(keys) -> Query
  • keys (Array)
selectKeys(keys) -> Query
  • keys (Array)
orderByAscending(key) -> Query
  • key (String)
orderByDescending(key) -> Query
  • key (String)
findObjectsInBackground(callback)
  • callback (Function)
getObjectInBackgroundWithId(objectId)
clearCachedResult()

Object iOS only

Properties

parseClassName (String)
objectId (String)
createdAt (String)
updatedAt (String)
allKeys (Array)

Methods

objectForKey(key) -> Any
setObjectForKey(object, key)
removeObjectForKey(key)
signUpInBackgroundWithBlock({ username, password, email, callback })
  • username: The unique username of the user.
  • password: The unique password of the user.
  • email: The email address of the user.
  • callback: The callback to be invoked if the user has been created (success: true) or if something went wrong (success: false, error: xxx)
logInWithUsernameInBackground({ username, password callback })
  • username: The unique username of the user.
  • password: The unique password of the user.
  • callback: The callback to be invoked if the user has been logged in (success: true, sessionToken: xxx) or if something went wrong (success: false, error: xxx)
logOutInBackground({ callback })
  • callback: The callback to be invoked if the user has been logged out (success: true) or if something went wrong (success: false, error: xxx)
deleteObject(callback) -> Varying

If a callback function is used, it will be called asynchronous. Otherwise, it returns a synchronous boolean indicating if it was completed successfully or not.

saveObject(callback) -> Varying

If a callback function is used, it will be called asynchronous. Otherwise, it returns a synchronous boolean indicating if it was completed successfully or not.

fetchInBackground(callback)

The callback is optional.

pinInBackground(callback)

The callback is optional.

unpinInBackground(callback)

The callback is optional.

fetchFromLocalDatastoreInBackground(callback)

The callback is optional.

saveEventually(callback)

The callback is optional.

deleteEventually()

Compile native libraries

iOS

This project uses the following Swift dependencies:

  • Bolts
  • BoltsSwift
  • Parse
  • ParseLiveQuery
  • Starscream

Updating the iOS SDKs

Use Carthage to refresh the bundled frameworks:

cd ios
XCODE_XCCONFIG_FILE=$(pwd)/carthage.xcconfig carthage bootstrap --platform iOS --use-xcframeworks

Once the build completes, copy the updated .xcframework directories from ios/Carthage/Build/ into ios/platform/, replacing the existing frameworks.

Note: Parse.framework already embeds Bolts; we ship only headers under platform/BoltsHeaders. After running carthage bootstrap, copy the latest Bolts-ObjC Bolts/*.h files into platform/BoltsHeaders/include/Bolts to keep the module shim in sync.

Example

var ParseLiveQuery = require("ti.livequery");

var win = Ti.UI.createWindow({
  backgroundColor: "#fff",
});

var btn1 = Ti.UI.createButton({
  title: "Initialize Parse",
  top: 100,
});

var btn2 = Ti.UI.createButton({
  title: "Subscribe",
  top: 200,
});

btn1.addEventListener("click", function () {
  ParseLiveQuery.initialize({
    applicationId: "",
    clientKey: "",
    server: "",
  });
});

// iOS only
btn2.addEventListener("click", function () {
  var client = ParseLiveQuery.createClient({
    applicationId: "",
    clientKey: "",
    server: "",
  });

  client.addEventListener("subscribe", function (e) {
    Ti.API.info("Subscribed!");
    // Subscribed
  });

  client.addEventListener("unsubscribe", function (e) {
    Ti.API.info("Unsubscribed!");
    // Unsubscribed
  });

  client.addEventListener("event", function (e) {
    Ti.API.info("Event!");

    printObject(e.object);

    // Event received, check with e.type
  });

  client.addEventListener("error", function (e) {
    Ti.API.info("Error!");
    Ti.API.info(e.error);
    // Error received, check with e.error
  });

  var query = ParseLiveQuery.createQuery({
    className: "Posts",
    predicate: 'name = "Hans"',
  });

  client.subscribeToQuery(query);

  // Get existing objects
  query.findObjectsInBackground(function (e) {
    Ti.API.info(e);
    var objects = e.objects;

    for (var i = 0; i < objects.length; i++) {
      printObject(objects[i]);
    }
  });
});

// Utility method to print objects by using "objectForKey"
function printObject(object) {
  var allKeys = object.allKeys;

  for (var i = 0; i < allKeys.length; i++) {
    var key = allKeys[i];
    var value = object.objectForKey(key);
    Ti.API.info(key + " = " + value);
  }
}

win.add(btn1);
win.add(btn2);

win.open();

Author

Hans Knöchel (@hansemannnn / Web)

License

Apache 2.0

Contributing

Code contributions are greatly appreciated, please submit a new Pull-Request!

About

Use the Parse & Parse Live Query SDK's in Axway Titanium.

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 2

  •  
  •  

Languages