StitchClient
can longer be constructed directly. Instead, StitchClientFactory
has been introduced to asynchronously perform any initialization steps needed to create a StitchClient
. StitchClientFactory
has a function called create
that will return a Task
that will resolve with a StitchClient
after initialization. The resolved client should be used for the lifetime of the application.
// old, 2.x.x usage import com.mongodb.stitch.android.StitchClient; void init() { StitchClient stitchClient = StitchClient(appId: "<app-id>"); stitchClient.logInWithProvider(new AnonymousAuthProvider()) .addOnSuccessListener(new OnSuccessListener<String>() { @Override public void onSuccess(String userId) { Log.d("MyApp", userId); } }); } // new, 3.x.x usage import com.mongodb.stitch.android.StitchClientFactory; StitchClient stitchClient = null; void init() { StitchClientFactory.create(context, "<appId>") .continueWith(new Continuation<StitchClient, Task<String>>() { @Override public Task<String> then(@NonNull Task<StitchClient> task) throws Exception { stitchClient = task.getResult(); return stitchClient.logInWithProvider(new AnonymousAuthProvider()); } }).addOnSuccessListener(new OnSuccessListener<Task<String>>() { @Override public void onSuccess(Task<String> userIdTask) { initializeApp(stitchClient); } }); }
Since the StitchClient
is only available after the Task resolves, initialization of an app should be deferred until this time and the client reference should be passed to some initialization component/function.
NOTE: Attempting to construct a StitchClient
without using StitchClientFactory
will result in an error being thrown.
Previously, logging in with a provider while already logging caused no log in to happen which proved to be confusing. These new semantics are in effect:
isAuthenticated()
method to the StitchClient
class. This method should be used to check if any authentication work needs to happen. It returns a boolean declaring whether or not the current client is authenticated.