2014-07-20 4 views
0

Я пытаюсь получить информацию о пользователе 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, любая идея, что я делаю неправильно, пожалуйста?

Любая помощь будет признателен Спасибо

ответ

0

Вы уверены, что если дата рождения существует на Facebook профиль, а? или они могут установить неприкосновенность частной жизни.

+0

Я пробовал много учетных записей и все еще возвращает null –

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