在Android上为Facebook SDK 3.0创建类

在Android上为Facebook SDK 3.0创建类,android,facebook,facebook-android-sdk,android-facebook,Android,Facebook,Facebook Android Sdk,Android Facebook,是否可以创建一个类来封装Android上的Android SDK i、 我不想把我的活动和所有的FB课程和东西混在一起,我想有一个我可以调用的类,它会完成任务 比如说, FacebookSDK sdk = new FacebookSDK(); sdk.publish(); 目前,我找不到一种方法来做到这一点,不使用片段或将我的活动与facebook代码混在一起 非常感谢 简言之,没有 您的活动需要通知Facebook SDK生命周期事件,以便正确存储状态并处理进出Facebook SDK活动的

是否可以创建一个类来封装Android上的Android SDK

i、 我不想把我的活动和所有的FB课程和东西混在一起,我想有一个我可以调用的类,它会完成任务

比如说,

FacebookSDK sdk = new FacebookSDK();
sdk.publish();
目前,我找不到一种方法来做到这一点,不使用片段或将我的活动与facebook代码混在一起

非常感谢

简言之,没有

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

是尽可能多地封装这一点的努力


您可以通过让所有活动扩展一些基类(即FBActivity)来理顺代码,这些基类可以正确调用
UILifecycleHelper
,但这只有在您的所有活动都以相当统一的方式与Facebook交互时才有帮助。

这是关于会话管理的

//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);
    }
发布数据定义也可以是-

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

谢谢,但是看起来你仍然需要一个活动来完成所有这些不,你只需要在方法内部传递listner,你就会在你的类内部得到调用,不需要活动,如果你知道我的意思,或者如果你想要的话,我也可以为此添加代码段