Я разрабатываю 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, и получить доступ к их информации?
Вы должны попытаться напечатать какие-либо исключения в вызове обратного вызова в() метод. –
Спасибо, я добавляю это в вызов(): Log.w (Constants.TAG, «Исключение:» + String.valueOf (exception == null)); .............. Но исключение исключение равно null. – RRTW
Можете ли вы также распечатать SessionState для каждого обратного вызова и посмотреть, с какими состояниями он переходит (и что метод onActivityResult на самом деле вызывается для вашего приложения)? Кроме того, возможно, что вы сразу же «уничтожили действия», включив в качестве параметра отладки на своем устройстве? –