繁体   English   中英

Android-Facebook使用您自己的按钮在活动之外登录

[英]Android - Facebook log in outside of an Activity with your own button

编辑:当我单击我的按钮并调用fbLogin()该应用程序会自动登录,但仍然无法访问我的onSuccess()方法并将其打印为“成功”,是否是因为我没有从自己的活动中进行操作onCreate方法,但是当我使用按钮时该怎么做? (我正在扩展我的活动):

public class AndroidPlatform extends AndroidLauncher implements PlatformSpecific{

        private Activity context;
        private CallbackManager callbackManager;

        public AndroidPlatform(Activity context){
            this.context = context;
            callbackManager = CallbackManager.Factory.create();
        }

        @Override
        public void fbLogin() {

        System.out.println("Hello Android");

            String a[] = new String[]{"user_friends"};
            LoginManager.getInstance().logInWithReadPermissions(context, Arrays.asList(a)); //Log in to FB
            LoginManager.getInstance().registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
                @Override
                public void onSuccess(LoginResult loginResult) {
                    System.out.println("Success");
                }

                @Override
                public void onCancel() {
                    System.out.println("Cancel");
                }

                @Override
                public void onError(FacebookException e) {
                    System.out.println("Error");
                }
            });
        }

        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            super.onActivityResult(requestCode, resultCode, data);
            callbackManager.onActivityResult(requestCode, resultCode, data);
        }

    }

为了清楚起见,这里是我扩展的类(我的活动):

public class AndroidLauncher extends AndroidApplication {
    @Override
    protected void onCreate (Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        FacebookSdk.sdkInitialize(getApplicationContext());
        AndroidApplicationConfiguration config = new AndroidApplicationConfiguration();
        initialize(new MyGdxGame(new AndroidPlatform(this)), config);
    }
}

如果我无法访问该方法,那么我将无法获得有关用户的任何信息,问题是我必须在此类中进行操作,我无法在自己的活动中进行操作,有没有办法使该工作有效?

您应该重写onActivityResult,以便在Facebook将控制权返回给您的活动时,该活动将能够使用您注册的回调管理器来处理结果。

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    callbackManager.onActivityResult(requestCode, resultCode, data);
}

有关使用LoginButton的示例,请参见https://developers.facebook.com/docs/facebook-login/android/v2.4#callback_handling

要使用非活动类的您自己的按钮登录到Facebook,可以执行以下操作:

您从以下位置登录的班级:

    public AndroidPlatform(Activity context){
        this.context = context;
        callbackManager = CallbackManager.Factory.create();
    }

    @Override
    public void fbLogin() {

        String a[] = new String[]{"user_friends"};
        LoginManager.getInstance().logInWithReadPermissions(context, Arrays.asList(a)); //Log in to FB
        LoginManager.getInstance().registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
            @Override
            public void onSuccess(LoginResult loginResult) {
                System.out.println("Success");
                GraphRequest request = GraphRequest.newMeRequest(
                        loginResult.getAccessToken(),
                        new GraphRequest.GraphJSONObjectCallback() {
                            @Override
                            public void onCompleted(
                                    JSONObject object,
                                    GraphResponse response) {
                                // Application code
                                Log.v("LoginActivity", response.toString());
                            }
                        });
                Bundle parameters = new Bundle();
                parameters.putString("fields", "id,name,email,gender, birthday");
                request.setParameters(parameters);
                request.executeAsync();
            }

            @Override
            public void onCancel() {
                System.out.println("Cancel");
            }

            @Override
            public void onError(FacebookException e) {
                System.out.println("Error");
            }
        });

    }

    public CallbackManager getCM(){
        return callbackManager;
    }

这是非常标准的,关键是您在类中为CallbackManager制定了get方法,因此您可以像这样从Activity调用onActivityResult

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        ap.getCM().onActivityResult(requestCode, resultCode, data);
    }

这就是全部。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM