2013-12-09 1 views
3

Facebook 및 Google+ 로그인을 담당하는 조각을 작성하고 있습니다. 조각은 성공적인 로그인 후보기 호출기로 호출되는 사용자 컨텐트가있는 세 조각의 상위 조각입니다. 이메일 및 서비스 이름을 Google 또는 Facebook에서 검색 할 때 공유 환경 설정에 저장 한 다음 성공하면보기 페이지가 사용자 조각과 함께 표시됩니다. 페이스 북 로그인은 정상적으로 작동하지만 Google+ 로그인을 시작하면 onConnected 콜백 메소드가 실행되지 않습니다. 내가 다른 탭으로 전환하고 조각에 로그인하기 위해 돌아 왔을 때 그것은 어떻게 든 트리거되고 사용자 파편을 얻습니다. Google+ 로그인 버튼을 눌러 onConnected 메소드를 실행하려면 어떻게해야하나요?Google+ 로그인 onConnected가 호출되지 않았습니다.

onActivityResult를 보장하기 위해 (나는

MainActivity.java

@Override 
protected void onActivityResult(int arg0, int arg1, Intent arg2) { 
    // TODO Auto-generated method stub 
    super.onActivityResult(arg0, arg1, arg2); 
    LoginFragment lf = (LoginFragment)getSupportFragmentManager().findFragmentByTag("Login"); 
    if (lf != null) { 
     lf.onActivityResult(arg0, arg1, arg2); 
    } 

} 

LoginFragment.java가 onConnected 방법에서는

@Override 
public void onActivityCreated(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onActivityCreated(savedInstanceState); 

    // Session class instance 
    mSession = new SessionManager(getActivity()); 

    setupGoogleplus(); 
    loginButton = (SignInButton) getActivity().findViewById(R.id.sign_in_button); 
    loginButton.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      if (!mPlusClient.isConnected()) { 
       if (mConnectionResult == null) { 
        mConnectionProgressDialog.show(); 
       } else { 
        try { 
         mConnectionResult.startResolutionForResult(getActivity(), REQUEST_CODE_RESOLVE_ERR); 
        } catch (SendIntentException e) { 
         // Try connecting again. 
         mConnectionResult = null; 
         mPlusClient.connect(); 
        } 
       } 
      } 
     } 
    }); 

    setupViewPager(); 

    if (mSession.isLoggedIn()) { 
     onLoged(); 
    } 

} 


private void setupViewPager() { 
    mMyFragmentPagerAdapter = new MyFragmentPagerAdapter(getChildFragmentManager()); 
    mViewPager = (ViewPager) getActivity().findViewById(R.id.pager); 

} 

private void setupGoogleplus() { 
    // google+ part 
    mPlusClient = new PlusClient.Builder(getSherlockActivity(), new ConnectionCallbacks() { 

     @Override 
     public void onConnected(Bundle connectionHint) { 
      String accountName = mPlusClient.getAccountName(); 
      // new 
      // DownloadImageTask(userPicture).execute(mPlusClient.getCurrentPerson().getImage().getUrl()); 
      // Toast.makeText(getActivity(), accountName + " is connected.", 
      // Toast.LENGTH_LONG).show(); 
      mConnectionProgressDialog.dismiss(); 
      mSession.createLoginSession(mPlusClient.getCurrentPerson().getName().getGivenName().toString(), mPlusClient.getAccountName(), "Google+"); 
     } 

     @Override 
     public void onDisconnected() { 
      Log.d(TAG, "disconnected"); 
     } 
    }, new OnConnectionFailedListener() { 

     @Override 
     public void onConnectionFailed(ConnectionResult result) { 
      if (mConnectionProgressDialog.isShowing()) { 
       // The user clicked the sign-in button already. Start to 
       // resolve 
       // connection errors. Wait until onConnected() to dismiss 
       // the 
       // connection dialog. 
       if (result.hasResolution()) { 
        try { 
         result.startResolutionForResult(getActivity(), REQUEST_CODE_RESOLVE_ERR); 
        } catch (SendIntentException e) { 
         mPlusClient.connect(); 
        } 
       } 
      } 
      // Save the result and resolve the connection failure upon a 
      // user click. 
      mConnectionResult = result; 
     } 
    }).setActions("http://schemas.google.com/AddActivity", "http://schemas.google.com/BuyActivity").build(); 
    mConnectionProgressDialog = new ProgressDialog(getActivity()); 
    mConnectionProgressDialog.setMessage("Signing in..."); 

} 

private void onSessionStateChange(Session session, SessionState state, Exception exception) { 
    if (state.isOpened()) { 
     Log.i(TAG, "Logged in..."); 
     // Request user data and show the results 
     Request.newMeRequest(session, new Request.GraphUserCallback() { 

      // callback after Graph API response with user object 
      @Override 
      public void onCompleted(GraphUser user, Response response) { 
       // TODO Auto-generated method stub 
       if (user != null) { 
        // Display the parsed user info 
        // Set the id for the ProfilePictureView 
        // view that in turn displays the profile picture. 
        // profilePictureView.setProfileId(user.getId()); 
        // Set the Textview's text to the user's name. 
        mSession.createLoginSession(user.getName(), user.getProperty("email").toString(), "Facebook"); 
        onLoged(); 
       } 
      } 
     }).executeAsync(); 
    } else if (state.isClosed()) { 
     Log.i(TAG, "Logged out..."); 
    } 
} 

private Session.StatusCallback callback = new Session.StatusCallback() { 
    @Override 
    public void call(Session session, SessionState state, Exception exception) { 
     onSessionStateChange(session, state, exception); 
    } 
}; 

@Override 
public void onActivityResult(int requestCode, int responseCode, Intent intent) { 
    if (requestCode == REQUEST_CODE_RESOLVE_ERR) { 
     mConnectionResult = null; 
     mPlusClient.connect(); 
    } else { 
     uiHelper.onActivityResult(requestCode, responseCode, intent); 
    } 
    super.onActivityResult(requestCode, responseCode, intent); 
} 

private static class MyFragmentPagerAdapter extends FragmentPagerAdapter { 

    public MyFragmentPagerAdapter(FragmentManager fm) { 
     super(fm); 
    } 

    @Override 
    public Fragment getItem(int index) { 
     switch (index) { 
     case 0: 
      return new FirstFragment(); 
     case 1: 
      return new SecondFragment(); 
     case 2: 
      return new ThirdFragment(); 
     } 
     return null; 

    } 

    @Override 
    public int getCount() { 

     return NUMBER_OF_PAGES; 
    } 

    @Override 
    public CharSequence getPageTitle(int position) { 
     switch (position) { 
     case 0: 
      return "1"; 
     case 1: 
      return "2"; 
     case 2: 
      return "3"; 
     } 
     return null; 
    } 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.login_fragment, container, false); 
    authButton = (LoginButton) view.findViewById(R.id.authButton); 
    authButton.setFragment(this); 
    authButton.setReadPermissions(Arrays.asList("email")); 
    return view; 
} 

@Override 
public void onResume() { 
    super.onResume(); 
    uiHelper.onResume(); 
} 

@Override 
public void onPause() { 
    super.onPause(); 
    uiHelper.onPause(); 
} 

@Override 
public void onDestroy() { 
    super.onDestroy(); 
    uiHelper.onDestroy(); 
} 

@Override 
public void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 
    uiHelper.onSaveInstanceState(outState); 
} 

@Override 
public void onStart() { 
    mPlusClient.connect(); 
    super.onStart(); 
} 

@Override 
public void onStop() { 
    super.onStop(); 
    mPlusClient.disconnect(); 
} 

public void googleLogout() { 

    if (mPlusClient.isConnected()) { 
     mPlusClient.clearDefaultAccount(); 
     mPlusClient.disconnect(); 
     mPlusClient.connect(); 
     mSession.logoutUser(); 
    } 
} 

public void onLoged() { 

    mViewPager.setAdapter(mMyFragmentPagerAdapter); 
    mViewPager.setVisibility(View.VISIBLE); 
    authButton.setVisibility(View.INVISIBLE); 
    loginButton.setVisibility(View.INVISIBLE); 

} 

public void onNotLoged() { 

    mViewPager.setAdapter(null); 
    mViewPager.setVisibility(View.INVISIBLE); 
    authButton.setVisibility(View.VISIBLE); 
    loginButton.setVisibility(View.VISIBLE); 

}} 

는 I 전화 주요 활동 mySession 개체 생성이 추가라는 공유 환경 설정)을 사용하여 데이터를 저장하고 onLoged를 사용하여 사용자 조각을 표시합니다. onConnected를 호출하기 위해 몇 번 탭을 전환해야하는 이유는 무엇입니까?

답변

2

연결 실패에 대한 해결책이 startIntentSenderForResult 및 REQUEST_CODE_RESOLVE_ERR 코드로 시작되었으므로 Activity.onActivityResult 내에 결과를 캡처해야합니다.

protected void onActivityResult(int requestCode, int responseCode, Intent intent) { 
    if (requestCode == REQUEST_CODE_RESOLVE_ERR && responseCode == RESULT_OK) { 
     mConnectionResult = null; 
     mPlusClient.connect(); 
    } 
} 

따라서 귀하의 경우는 필요한 모든 검사 후 LoginFragment하여 onActivityResult에서 mPlusClient.connect();를 호출해야합니다.

+0

여전히 연결되어 있지 않습니다. –

관련 문제