在Facebook成功注册后没有返回我的应用程序

时间:2016-05-27 10:03:37

标签: android facebook facebook-android-sdk

我使用过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();
    }
}

1 个答案:

答案 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();