2016-05-27 6 views
0

私はfacebook-android-sdk:4.12.0を使用しています。アプリからログインすると、Facebookのネイティブアプリが起動し、ユーザー名、パスワード画面が表示されます。ここで私はFacebookにサインアップしようとします、それは詳細を尋ねて、うまくサインアップし、私のホームページも表示します。しかし、もし私がデバイスバックボタンをクリックしても、私のアプリケーションにはもう一度行きません。その代わりに、それはapp.Again私はランチャーから、同じFacebookのホーム画面が表示されますが、私のアプリには行っていない起動します。Facebookに登録した後にアプリに戻りません

この問題はSamsung S4デバイスでのみ発生します。この問題を解決するにはどうすればよいですか?

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

あなたがここに – mdDroid

+0

をコードを投稿することができます持っていますアクティビティのonActivityResultを返しました。@ Ramprasad 。 – Lampard

+0

@mdDroid私の質問にコードを追加しました – Ramprasad

答えて

0
LoginManager.getInstance().logInWithReadPermissions(LoginFragment.this.. 
//?! probably problem here, must be activity context getActivity() 

は、アクティビティクラスでこのすべてを実装してからの断片からloginningのためのパブリックメソッドを呼び出す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

((YourActivity)getActivity()).yourLoginMethod(); 

だけでなく、このチェック:

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; 
    } 


} 

注意が活動に実装してください。その後、

public void loginWithFacebook(){ 
    try{ 
     LoginManager.getInstance().logInWithReadPermissions(this, Arrays.asList("public_profile", "user_friends")); 
    }catch(Exception e){} 
} 

およびフラグメントから呼び出す:

((YourActivity)getActivity()).loginWithFacebook(); 
+0

上記のコードでは、SettingsServiceとは何ですか? – Ramprasad

+0

これは更新されたFacebookのトークンを保持するためのカスタムクラスです(jsonにシリアル化してsaveSettingsの記憶域に保存します)。これはトークンを常に更新して保存するのに便利です。 –

+0

私はそのクラスの答えを更新しました - 希望はクリアされます)) –

関連する問題