2013-04-25 3 views
0

Я разрабатываю APP, который использует немного информации в facebook для регистрации моего собственного сайта.android facebook sdk 3.0 Войти и получить информацию о пользователе

Сначала я использовал facebook SDK 1.5, все работает хорошо. До тех пор, пока в facebook не будет указано, что они оставят поддержку старого (v2.0 и ниже) SDK с июня 2013 года.

Так что я должен обновить его до 3.0 и переписать код.

Вот что я сделал до сих пор после чтения об официальном руководстве facebook в:

manifst.xml

<!-- some stuff --> 
<uses-permission android:name="android.permission.INTERNET" /> 
<meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/fbAppId"/> 
<activity android:name="com.facebook.LoginActivity" android:label="@string/app_name" /> 

strings.xml

<!-- some stuff --> 
<string name="fbAppId">1234567890</string> <!-- You do know this ID is fake, right ? --> 

код

public class LoginFragment extends SherlockFragment 
{ 
    private UiLifecycleHelper uiHelper; 

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

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
    { 
    View view=inflater.inflate(R.layout.login_fragment, container, false); 

    LoginButton authButton=(LoginButton)view.findViewById(R.id.btnLogin); 
    authButton.setFragment(this); 
    authButton.setReadPermissions(Arrays.asList("basic_info", "user_status", "email")); 

    return view; 
    } 

    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
    super.onCreate(savedInstanceState); 
    uiHelper=new UiLifecycleHelper(getActivity(), callback); 
    uiHelper.onCreate(savedInstanceState); 
    } 

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

    // For scenarios where the main activity is launched and user 
    // session is not null, the session state change notification 
    // may not be triggered. Trigger it if it's open/closed. 
    Session session=Session.getActiveSession(); 
    if(session!=null&&(session.isOpened()||session.isClosed())) 
    { 
     onSessionStateChange(session, session.getState(), null); 
    } 

    uiHelper.onResume(); 
    } 

    @Override 
    public void onActivityResult(int requestCode, int resultCode, Intent data) 
    { 
    super.onActivityResult(requestCode, resultCode, data); 
    uiHelper.onActivityResult(requestCode, resultCode, data); 
    } 

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

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

    @Override 
    public void onSaveInstanceState(Bundle outState) 
    { 
    try 
    { 
     super.onSaveInstanceState(outState); 
     setUserVisibleHint(true); 
     uiHelper.onSaveInstanceState(outState); 
    } 
    catch(Exception e) 
    { 
     e.printStackTrace(); 
     Log.w(Constants.TAG, "Error on save instance state, "+e.toString()); 
    } 
    } 

    private void onSessionStateChange(Session session, SessionState state, Exception exception) 
    { 
    if(state.isOpened()) //I don't know why state is always not opened......? 
    { 
     Request request=Request.newMeRequest(session, new Request.GraphUserCallback() 
     { 
     @Override 
     public void onCompleted(GraphUser user, Response response) 
     { 
      if(user!=null) 
      { 
      Log.i(Constants.TAG, "Logged in..."); 
      Log.d("user fname", user.getFirstName()); 
      Log.d("user lname", user.getLastName()); 
      Log.d("user username", user.getUsername()); 
      Log.d("user email", (String) response.getGraphObject().getProperty("email")); 
      } 
      else 
      { 
      Log.i(Constants.TAG, "Logged out..."); 
      } 

     } 
     }); 

     Request.executeBatchAsync(request); 
    } 
    } 
} 

когда Я запускаю свой APP, я вижу кнопку входа в facebook.

Нажмите, появится диалоговое окно, чтобы попросить меня разрешить моему APP получать доступ к информации о facebook, электронной почте ... и т. Д.

И после того, как я нажмите Да, нет ничего случиться, ничего выходит даже в LogCat ...

Как я знаю, что пользователь фактически вошли в Facebook, и получить доступ к их информации?

+0

Вы должны попытаться напечатать какие-либо исключения в вызове обратного вызова в() метод. –

+0

Спасибо, я добавляю это в вызов(): Log.w (Constants.TAG, «Исключение:» + String.valueOf (exception == null)); .............. Но исключение исключение равно null. – RRTW

+0

Можете ли вы также распечатать SessionState для каждого обратного вызова и посмотреть, с какими состояниями он переходит (и что метод onActivityResult на самом деле вызывается для вашего приложения)? Кроме того, возможно, что вы сразу же «уничтожили действия», включив в качестве параметра отладки на своем устройстве? –

ответ

0

вы должны переопределить метод onActivityResult и вызвать

authButton.onActivityResult(params); 
+0

Спасибо, я добавляю это «authButton.onActivityResult (requestCode, resultCode, data);» в переопределении onActivityResult, но все равно ничего не происходит ... – RRTW

+0

Привет @Cromir Я попытался реализовать поток входа FB с помощью UILifeCycleHelper и в некоторых случаях параметр 'data', который обычно имеет поле' mMap', которое содержит ответ FB , нулевой. Почему это происходит? – toobsco42

Смежные вопросы