0

是否可以创建一个类来在android上封装Android SDK?

即——我不想把我的活动与所有的 FB 会话和东西混为一谈,我想有一门我可以打电话的课程,它会完成这项工作。

例如,

FacebookSDK sdk = new FacebookSDK();
sdk.publish();

现在我找不到一种方法来做到这一点,而不使用 Fragments 或用 facebook 代码弄乱我的活动。

多谢!

4

2 回答 2

2

这都是关于会话管理的。

//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);
        } 

发布您的请求的方法 -

    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 定义也可以是 -

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);
}
于 2013-06-06T19:57:35.600 回答
0

简而言之,没有。

您的活动需要通知 Facebook SDK 生命周期事件,以便正确存储状态并处理与 Facebook SDK 活动之间的 UI 流。

UILifecycleHelper尽可能地封装了这一点。

您可以通过让您的所有活动扩展某个基类(即 FBActivity)来整理您的代码,该基类可以对 进行所有正确的调用UILifecycleHelper,尽管这仅在您的所有活动都以相当统一的方式与 Facebook 交互时才有帮助。

于 2013-05-29T13:11:47.030 回答