[英]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.