簡體   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