我使用过facebook-android-sdk:4.12.0
。当我从我的应用程序登录时,Facebook本机应用程序启动并显示用户名,密码屏幕。在这里,我尝试在Facebook上注册,它会询问详细信息并成功注册,并显示我的主页。但是如果我点击设备后退按钮,它就不会再次进入我的应用程序。而不是那样,它关闭app.Again我从启动器启动我的应用程序,显示相同的Facebook主屏幕,但不会转到我的应用程序。
仅在 Samsung S4设备中出现此问题。如何解决此问题。是否有任何我需要做的事情?
LoginFragment.java
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
rootView = inflater.inflate(R.layout.fragment_login, container, false);
callbackManager = CallbackManager.Factory.create();
facebookLoginButton = (RelativeLayout) rootView.findViewById(R.id.facebook_login_button);
LoginManager.getInstance().registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
if (loginResult.getAccessToken() != null) {
AccessToken.setCurrentAccessToken(loginResult.getAccessToken());
mListener.onFacebookLoginSuccess();
} else {
//Facebook access token not available.
}
}
@Override
public void onCancel() {
Toast.makeText(getActivity(), getActivity().getResources().getString(R.string.login_cancelled_please_try_again), Toast.LENGTH_SHORT).show();
}
@Override
public void onError(FacebookException error) {
Toast.makeText(getActivity(), getActivity().getResources().getString(R.string.login_cancelled_please_try_again), Toast.LENGTH_SHORT).show();
}
});
facebookLoginButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
LoginManager.getInstance().logInWithReadPermissions(LoginFragment.this, Arrays.asList("public_profile", "user_friends"));
}
});
return rootView;
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
callbackManager.onActivityResult(requestCode, resultCode, data);
}
LoginActivity.java
public class LoginActivity extends FragmentActivity implements LoginFragment.OnLoginFragmentListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
}
@Override
public void onFacebookLoginSuccess() {
// Launch Main Activity.
launchMainActivity();
}
}
答案 0 :(得分:0)
LoginManager.getInstance().logInWithReadPermissions(LoginFragment.this..
//?! probably problem here, must be activity context getActivity()
在activity类中实现所有这些,然后从片段中调用public方法进行登录
((YourActivity)getActivity()).yourLoginMethod();
但也要检查一下:
扩展的Application类中的:
private static AccessTokenTracker mAccessTokenTracker;
OnCreate中:
FacebookSdk.sdkInitialize(mContext);
mAccessTokenTracker = new AccessTokenTracker() {
@Override
protected void onCurrentAccessTokenChanged(
AccessToken oldAccessToken,
AccessToken currentAccessToken) {
if(currentAccessToken != null){
SettingsService.settings.facebookToken = currentAccessToken.getToken();
SettingsService.saveSettings();
}
}
};
清单中的:
<activity android:name="com.facebook.FacebookActivity"
android:configChanges=
"keyboard|keyboardHidden|screenLayout|screenSize|orientation"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:label="@string/app_name" />
<meta-data
android:name="com.facebook.sdk.ApplicationId"
android:value="@string/facebook_app_id" />
可用性设置:
public class SettingsModel {
public String facebookToken = "";
//....
}
和班级:
public class SettingsService {
private static String KEY = "yourDesiredKey";
private static Context mContext;
public static SettingsModel settings;
public SettingsService(){
mContext = LastGrabApplication.getLastGrabContext();
//if(settings == null){
settings = getSettings();
//}
}
public static void saveSettings(){
if(settings == null){
settings = new SettingsModel();
}
SharedPreferences.Editor editor = mContext
.getSharedPreferences(KEY, Activity.MODE_PRIVATE).edit();
Gson gson = new Gson();
String jsonSettings = gson.toJson(settings);
editor.putString("settings", jsonSettings );
editor.commit();
settings = getSettings();
}
public static SettingsModel getSettings() {
SharedPreferences editor = mContext.getSharedPreferences(KEY,
Activity.MODE_PRIVATE);
try{
String jsonSettings = editor.getString("settings","settings");
Gson gson = new Gson();
settings = gson.fromJson(jsonSettings, SettingsModel.class);
}catch (Exception e){
settings = new SettingsModel();
}
return settings;
}
}
请注意实施IN ACTIVITY:
public void loginWithFacebook(){
try{
LoginManager.getInstance().logInWithReadPermissions(this, Arrays.asList("public_profile", "user_friends"));
}catch(Exception e){}
}
然后从片段调用:
((YourActivity)getActivity()).loginWithFacebook();