Is it possible to create a class to encapsulate the Android SDK on android?
i.e - I don\'t want to clutter my activity with all the FB sessions and stuff, I want to
Its all about session management.
//Check for active session -
Session session = Session.getActiveSession();
// if it doesnt exist create one-
if(session ==null)
session= new Session(getApplicationContext)
// if it is not open open it first
if (!session.isOpened() && !session.isClosed()) {
session.openForRead(new Session.OpenRequest(this)
.setPermissions(Arrays.asList("basic_info"))
.setCallback(statusCallback));
}
else
{
Session.openActiveSession(getActivity(), this, true, statusCallback);
}
// callback listner fires when session state changes
private class SessionStatusCallback implements Session.StatusCallback {
@Override
public void call(Session session, SessionState state, Exception exception) {
//If your session is opened
if(session.isOpened()
publishData(session);
}
Method to publish your request -
public void publishData(Session session)
{
OpenRequest open = new OpenRequest(this);
open.setLoginBehavior(SessionLoginBehavior.SUPPRESS_SSO);
open.setPermissions(Arrays.asList(new String[]{"email", "publish_actions", "user_birthday", "user_hometown"}));
open.setCallback(this);
session.openForPublish(open);
}
publishData defination can also be -
public void publishData(Session session)
{
Bundle params = new Bundle();
params.putByteArray("message", "some message".egtBytes());
params.putByteArray("name", "some name".getBytes());
params.putByteArray("link", "some link".getBytes());
params.putByteArray("description", "Some description".getBytes());
params.putByteArray("picture", "picture.url".getBytes());
Request postToWall = Request.newRestRequest(session,
"/" + pickedUsersId.get(0) + "/feed", params, HttpMethod.POST);
postToWall.setCallback( new Request.Callback()
{
@Override
public void onCompleted(Response response)
{
// get response
Log.e(TAG, response.toString());
}
});
Request.executeBatchAsync(postToWall);
}
In short, no.
Your activity needs to be notifying the Facebook SDK of lifecycle events in order to properly store state and handle the UI flow to and from the Facebook SDK activities.
UILifecycleHelper is an effort to encapsulate this as much as possible.
You may be able to unclutter your code by having all your activities extend some base class (i.e. FBActivity) that makes all the proper calls to UILifecycleHelper
, though this only helps if all your activities are interacting with Facebook in a fairly uniform manner.