Я пытаюсь получить информацию о пользователе Facebook на мой андроид приложениеFacebook разрешения - Android Мобильное приложение
Это то, что я до сих пор:
MainActivity.java
package com.firstandroidapp;
import java.security.NoSuchAlgorithmException;
import java.util.Arrays;
import java.util.List;
import android.support.v4.app.FragmentActivity;
import android.support.v7.app.ActionBarActivity;
import android.app.Activity;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.content.pm.Signature;
import android.os.Bundle;
import android.util.Base64;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import com.facebook.*;
import com.facebook.Session.OpenRequest;
import com.facebook.model.*;
import com.facebook.widget.LoginButton;
import android.widget.TextView;
import android.content.Intent;
public class MainActivity extends FragmentActivity {
private MainFragment mainFragment;
//
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (savedInstanceState == null) {
// Add the fragment on initial activity setup
mainFragment = new MainFragment();
getSupportFragmentManager()
.beginTransaction()
.add(android.R.id.content, mainFragment)
.commit();
} else {
// Or set the fragment from restored state info
mainFragment = (MainFragment) getSupportFragmentManager()
.findFragmentById(android.R.id.content);
}
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Session.getActiveSession().onActivityResult(this, requestCode, resultCode, data);
}
}
и MainFragment.java
package com.firstandroidapp;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.json.JSONArray;
import org.json.JSONObject;
import com.facebook.LoggingBehavior;
import com.facebook.Request;
import com.facebook.Response;
import com.facebook.Session;
import com.facebook.SessionState;
import com.facebook.Settings;
import com.facebook.UiLifecycleHelper;
import com.facebook.model.GraphObject;
import com.facebook.model.GraphObjectList;
import com.facebook.model.GraphUser;
import com.facebook.widget.LoginButton;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
public class MainFragment extends Fragment {
private static final String TAG = "MainFragment";
private TextView userInfoTextView;
private UiLifecycleHelper uiHelper;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
uiHelper = new UiLifecycleHelper(getActivity(), callback);
uiHelper.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater,
ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.activity_main, container, false);
LoginButton authButton = (LoginButton) view.findViewById(R.id.authButton);
userInfoTextView = (TextView) view.findViewById(R.id.userInfoTextView);
authButton.setFragment(this);
List<String> permission=new ArrayList<String>();
permission.add("public_profile");
permission.add("email");
permission.add("user_birthday");
permission.add("user_location");
permission.add("user_likes");
permission.add("user_interests");
permission.add("user_relationships");
authButton.setReadPermissions(permission);
return view;
}
private void onSessionStateChange(Session session, SessionState state, Exception exception) {
if (state.isOpened()) {
Log.i(TAG, "Logged in...");
userInfoTextView.setVisibility(View.VISIBLE);
// Request user data and show the results
Request.executeMeRequestAsync(session, new Request.GraphUserCallback() {
@Override
public void onCompleted(GraphUser user, Response response) {
// TODO Auto-generated method stub
userInfoTextView.setText(buildUserInfoDisplay(user));
}
});
} else if (state.isClosed()) {
Log.i(TAG, "Logged out...");
userInfoTextView.setVisibility(View.INVISIBLE);
}
}
private Session.StatusCallback callback = new Session.StatusCallback() {
@Override
public void call(Session session, SessionState state, Exception exception) {
onSessionStateChange(session, state, exception);
}
};
@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) {
super.onSaveInstanceState(outState);
uiHelper.onSaveInstanceState(outState);
}
private interface MyGraphLanguage extends GraphObject {
// Getter for the ID field
String getId();
// Getter for the Name field
String getName();
}
private String buildUserInfoDisplay(GraphUser user) {
StringBuilder userInfo = new StringBuilder("");
//Settings.addLoggingBehavior(LoggingBehavior.REQUESTS);
// Example: typed access (name)
// - no special permissions required
userInfo.append(String.format("Name: %s\n\n",
user.getName()));
// Example: typed access (birthday)
// - requires user_birthday permission
// userInfo.append(String.format("Birthday: %s\n\n",
// user.getBirthday()));
//
userInfo.append(String.format("E-mail: %s\n\n",
user.asMap().get("email").toString()));
// Example: partially typed access, to location field,
// name key (location)
// - requires user_location permission
// userInfo.append(String.format("Location: %s\n\n",
// user.getLocation().getProperty("name")));
// Example: access via property name (locale)
// - no special permissions required
userInfo.append(String.format("Locale: %s\n\n",
user.getProperty("locale")));
// Example: access via key for array (languages)
// - requires user_likes permission
// JSONArray languages = (JSONArray)user.getProperty("languages");
// if (languages.length() > 0) {
// ArrayList<String> languageNames = new ArrayList<String>();
//
// // Get the data from creating a typed interface
// // for the language data.
// GraphObjectList<MyGraphLanguage> graphObjectLanguages =
// GraphObject.Factory.createList(languages,
// MyGraphLanguage.class);
//
// // Iterate through the list of languages
// for (MyGraphLanguage language : graphObjectLanguages) {
// // Add the language name to a list. Use the name
// // getter method to get access to the name field.
// languageNames.add(language.getName());
// }
//
// userInfo.append(String.format("Languages: %s\n\n",
// languageNames.toString()));
// }
Log.d(TAG, user.getName() + user.asMap().get("email").toString() + user.getProperty("locale"));
return userInfo.toString();
}
}
и я получаю только имя и адрес электронной почты и язык, и я хочу больше такую информацию, как день рождения и страницы, которые ему нравятся, и уже добавили эти разрешения, но, например, день рождения возвращает null, любая идея, что я делаю неправильно, пожалуйста?
Любая помощь будет признателен Спасибо
Я пробовал много учетных записей и все еще возвращает null –