I need to ask at the user to authorize publish permission if he dont do it.
I do it with this row of code:
//Into ShareOnFacebookFragment
Session.getActiveSession().requestNewPublishPermissions(new NewPermissionsRequest((SocialSharingActivity)getActivity(), "publish_actions"));
SocialSharingActivity is the Activity related to my Fragment (ShareOnFacebookFragment).
When I run the application the app correctly ask me the publish permission and I accept, but when I do publish I have this error in my logcat:
12-11 12:17:27.277: E/AndroidRuntime(29125): Caused by: java.lang.UnsupportedOperationException: Session: an attempt was made to request new permissions for a session that has a pending request.
Honestly my only hypotesis is that requestNewPublishPermissions run Async in background and then I have the problems when I try to publish. How I can solve this problem ? I post also my Entire fragment code
private final String TAG = "ShareFragment";
private UiLifecycleHelper uiHelper;
// To allow a Fragment to communicate up to its Activity, you can define an interface in the Fragment class and implement it within the
// Activity. The Fragment captures the interface implementation during its onAttach() lifecycle method and can then call the Interface methods in
// order to communicate with the Activity.
private Session.StatusCallback callback = new Session.StatusCallback() { //Provides asynchronous notification of Session state changes.
#Override
public void call(Session session, SessionState state,Exception exception) {
onSessionStateChange(session, state, exception);
}
};
private void onSessionStateChange(Session session, SessionState state,Exception exception) {
Log.i("CALLBACK: ", "Session state change: "+state);
}
#Override
public void onAttach(Activity activity) {
super.onAttach(activity);
}
#Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
uiHelper = new UiLifecycleHelper(getActivity(), callback);
uiHelper.onCreate(savedInstanceState);
};
// This makes sure that the container activity has implemented
// the callback interface. If not, it throws an exception
// try {
// mCallback = (OnHeadlineSelectedListener) activity;
// } catch (ClassCastException e) {
// throw new ClassCastException(activity.toString()
// + " must implement OnHeadlineSelectedListener");
// }
//}
#Override
public void onPause() {
super.onPause();
uiHelper.onPause();
};
#Override
public void onResume() {
// TODO Auto-generated method stub
super.onResume();
uiHelper.onResume();
}
#Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
RelativeLayout myRelative = (RelativeLayout) inflater.inflate(R.layout.share_frame, container, false);
shareButton = (Button) myRelative.findViewById(R.id.shareButton);
workoutIdTextView = (TextView) myRelative.findViewById(R.id.workoutIdTextView);
objectCreatedTextView = (TextView) myRelative.findViewById(R.id.objectCreatedTextView);
actionCreatedTextView = (TextView) myRelative.findViewById(R.id.actionCreatedTextView);
return myRelative;
}
#Override
public void onSaveInstanceState(Bundle outState) {
// TODO Auto-generated method stub
super.onSaveInstanceState(outState);
uiHelper.onSaveInstanceState(outState);
}
#Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
uiHelper.onActivityResult(requestCode, resultCode, data);
}
#Override
public void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
uiHelper.onDestroy();
}
#Override
public void onStart() {
// TODO Auto-generated method stub
super.onStart();
}
#Override
public void onActivityCreated(Bundle bundle) {
super.onActivityCreated(bundle);
Log.i(TAG, "ONACTIVITYCREATED");
SocialSharingActivity caller =(SocialSharingActivity) getActivity();
Log.w(TAG, "caller "+caller.toString());
workoutIdTextView.setText(String.valueOf(caller.getWorkoutId()));
Log.i(TAG, "Data course " + caller.getEwCourse().toString());
Log.i(TAG, "Message Run " + caller.getEwRun().toString());
ewCourseFrag = caller.getEwCourse();
ewRunFrag = caller.getEwRun();
parAct=new Bundle();
parAct.putAll(ewRunFrag.getParams());
parObj = new Bundle();
parObj.putString("access_token", APP_ACCESS_TOKEN);
gson = new Gson();
parObj.putString("object", gson.toJson(ewCourseFrag));
publishSession = Session.getActiveSession();
//------------------------------Batch HTTP request-----------------------------------------------------------------------------------------------------------------
//
//------------------------------Declaration--and--implementation--of--Callback-----------------------------------------------------------------------------------------------------------------
RequestBatch.Callback batchCallback= new RequestBatch.Callback() {
#Override
public void onBatchCompleted(RequestBatch batch) {
Log.w(TAG, "Batch completed: "+ "OK");
//
}
};
//
Request.Callback reqCreateObjCallback= new Request.Callback() {
#Override
public void onCompleted(Response response) {
if(response.getError() == null){
Log.w(TAG,"reqCreateObjCallback: "+ "OK");
objectCreatedTextView.setText("OK object");
}
else {
Log.e(TAG,"reqCreateObjCallback: "+ response.getError().toString());
Log.d(TAG, response.getError().getCategory().toString());
objectCreatedTextView.setText(response.getError().getCategory().toString());
}
//400
}
};
//
Request.Callback reqPublishCallback= new Request.Callback() {
#Override
public void onCompleted(Response response) {
if(response.getError() == null) {
Log.w(TAG, "reqPublishCallback: "+ "OK");
actionCreatedTextView.setText("OK action");
// Toast.makeText(context, "ACTION_CREATED", Toast.LENGTH_LONG).show();
}
else {
Log.e(TAG, "reqPublishCallback: "+ response.getError().toString());
Log.d(TAG, response.getError().getCategory().toString());
actionCreatedTextView.setText(response.getError().getCategory().toString());
}
}
};
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------
//------------------------------Create--instance--of--RequestBatch--------------------------------------------------------------------------------------------------------
RequestBatch requestBatch= new RequestBatch();
//------------------------------Request--for-create-the-graph-object---------------------------------------------------------------------------------------------------------------
Request reqCreateObj= new Request(
publishSession,
"app/objects/fitness.course",
parObj,HttpMethod.POST); //Create a Request for a common ObiectGraph of type course
reqCreateObj.setCallback(reqCreateObjCallback); //Set the callback for the Request
reqCreateObj.setBatchEntryName("objectCreate"); //Tag the request name into the Batch with "objectCreate"
requestBatch.add(reqCreateObj); //Add the request to the batch
//------------------------------Request-for-publish-action-------------------------------------------------------------------------------------------------------------------------------
parAct.putString("course",
"{result=objectCreate:$.id}"); //Use the tag to retrieve the informations about the graph object created
//can also add scrape flag to update the object
// par2.putString("end_time", new Date(new Date().getTime()+1000*60*2).toString()); // live text test
Request reqPublish =
new Request(publishSession, //Create a request for publish an action relative to the object;
// Similarly at a phrase, an action is like "verbo", graph object
"me/fitness.runs/",parAct, //is like "complemento oggetto" and the the user is "soggetto"
HttpMethod.POST); //
reqPublish.setCallback(reqPublishCallback); //Set the callback for the Request
requestBatch.add(reqPublish); //Add the request to the batch
requestBatch.addCallback(batchCallback); //Set the callback for the Batch Request
//Check network session opened and permissions
//codice sospeso
if(Session.getActiveSession().isOpened() && hasPublishPermission() && isNetworkAvailable()) {
Toast.makeText(getActivity(), "Session is opened, I have permission, Network is On", Toast.LENGTH_LONG).show();
requestBatch.executeAsync();
}
else if (Session.getActiveSession().isOpened() && isNetworkAvailable()){
Toast.makeText(getActivity(), "I dont have Permissions: " + Session.getActiveSession().getPermissions(), Toast.LENGTH_LONG).show();
Session.getActiveSession().requestNewPublishPermissions(new NewPermissionsRequest((SocialSharingActivity)getActivity(), "publish_actions"));
Toast.makeText(getActivity(), "Permissions: " + Session.getActiveSession().getPermissions(), Toast.LENGTH_LONG).show();
}
else if (Session.getActiveSession().isOpened() && hasPublishPermission()) {
Toast.makeText(getActivity(), "Check your status connection.", Toast.LENGTH_LONG).show();
}
else {
Intent loginIntent = new Intent((SocialSharingActivity)getActivity(),FbLoginActivity.class);
startActivity(loginIntent);
}
}
private boolean isNetworkAvailable() {
ConnectivityManager connectivityManager = (ConnectivityManager)getActivity().getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
return activeNetworkInfo != null;
}
private boolean hasPublishPermission() {
Session session = Session.getActiveSession();
return session != null && session.getPermissions().contains("publish_actions");
}
}
Related
i have implement social auth for integration of facebook now i want to get user profile info and unique id .I have get access token but unable to get user profile info .I have implement it by following
public class SignUp extends Activity implements OnClickListener {
private EditText email_mEditText, password_mEditText;
SocialAuthAdapter socialAuthAdapter;
private RelativeLayout facebook_layout, twitter_layout, googleplus_layout, linkdin_layout;
private Button signIn_mButton;
String email_mString, password_mString;
private ImageView backIcon_mImageView, logoIcon_mImageView;
private TextView forgotpassword_mTextView;
String emailid_mString ;
EditText emailid_mEt;
Button submit_mbtn;
Dialog dialog;
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.sign_up);
signIn_mButton = (Button) findViewById(R.id.signin_button);
email_mEditText = (EditText) findViewById(R.id.email_editText);
password_mEditText = (EditText) findViewById(R.id.password_editText);
backIcon_mImageView = (ImageView) findViewById(R.id.backicon_imageView);
logoIcon_mImageView = (ImageView) findViewById(R.id.logoicon_imageView);
facebook_layout = (RelativeLayout) findViewById(R.id.facebook_layout);
twitter_layout = (RelativeLayout) findViewById(R.id.twitter_layout);
googleplus_layout = (RelativeLayout) findViewById(R.id.google_layout);
linkdin_layout = (RelativeLayout) findViewById(R.id.linkdin_layout);
facebook_layout.setOnClickListener(this);
twitter_layout.setOnClickListener(this);
googleplus_layout.setOnClickListener(this);
linkdin_layout.setOnClickListener(this);
socialAuthAdapter = new SocialAuthAdapter(new ResponseListener());
signIn_mButton.setOnClickListener(this);
backIcon_mImageView.setOnClickListener(this);
logoIcon_mImageView.setOnClickListener(this);
forgotpassword_mTextView = (TextView) findViewById(R.id.forgotpassword_textView);
forgotpassword_mTextView.setPaintFlags(forgotpassword_mTextView.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);
forgotpassword_mTextView.setOnClickListener(this);
}
#Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.signin_button:
email_mString = email_mEditText.getText().toString();
password_mString = password_mEditText.getText().toString();
if ((email_mString.isEmpty()) && (password_mString.isEmpty())) {
email_mEditText.addTextChangedListener(new TextWatcher() {
#Override
public void afterTextChanged(Editable s) {
}
#Override
public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {
// TODO Auto-generated method stub
email_mEditText.setError("Value required");
}
#Override
public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {
// TODO Auto-generated method stub
email_mEditText.setError(null);
}
});
} else if ((email_mString.isEmpty())) {
email_mEditText.setError("Please Enter the Email ");
} else if ((password_mString.isEmpty())) {
password_mEditText.setError("Please Enter the Password ");
} else {
Log.d("u r", "ur in else part");
new Thread(null, threadEventListing, "").start();
}
break;
case R.id.backicon_imageView:
Intent signInIntent = new Intent(SignUp.this, SignIn.class);
startActivity(signInIntent);
overridePendingTransition(R.anim.slide_in_left, R.anim.slide_out_left);
finish();
break;
case R.id.logoicon_imageView:
Intent signIntent = new Intent(SignUp.this, SignIn.class);
startActivity(signIntent);
overridePendingTransition(R.anim.slide_in_left, R.anim.slide_out_left);
finish();
break;
case R.id.forgotpassword_textView:
Log.d("hello", "u clicked FOrgot textview");
dialog = new Dialog(this);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(R.layout.forgot_password);
emailid_mEt=(EditText)dialog.findViewById(R.id.etforgotpassword);
submit_mbtn=(Button)dialog.findViewById(R.id.btnsubmit);
submit_mbtn.setOnClickListener(new OnClickListener() {
#Override
public void onClick(View v) {
// TODO Auto-generated method stub
emailid_mString = emailid_mEt.getText().toString();
new Thread(null,threadForgotPassword,"").start();
}
});
dialog.show();
break;
case R.id.facebook_layout:
socialAuthAdapter.authorize(SignUp.this, Provider.FACEBOOK);
socialAuthAdapter.signOut(this, Provider.FACEBOOK.toString());
break;
case R.id.twitter_layout:
socialAuthAdapter.authorize(SignUp.this, Provider.TWITTER);
socialAuthAdapter.signOut(this, Provider.TWITTER.toString());
break;
case R.id.google_layout:
socialAuthAdapter.authorize(SignUp.this, Provider.GOOGLEPLUS);
socialAuthAdapter.signOut(this, Provider.GOOGLEPLUS.toString());
break;
case R.id.linkdin_layout:
socialAuthAdapter.authorize(SignUp.this, Provider.LINKEDIN);
socialAuthAdapter.signOut(this, Provider.LINKEDIN.toString());
break;
}
}
#Override
public void onBackPressed() {
// TODO Auto-generated method stub
Intent signInIntent = new Intent(SignUp.this, SignIn.class);
startActivity(signInIntent);
overridePendingTransition(R.anim.slide_in_left, R.anim.slide_out_left);
finish();
}
private final class ResponseListener implements DialogListener {
public void onComplete(Bundle values) {
Log.d("tag", "In on comppleter");
String token = socialAuthAdapter.getCurrentProvider().getAccessGrant().getKey();
Log.d("Token", token);
}
#Override
public void onBack() {
// TODO Auto-generated method stub
}
#Override
public void onCancel() {
// TODO Auto-generated method stub
}
#Override
public void onError(SocialAuthError arg0) {
// TODO Auto-generated method stub
}
}
}
Use this Code
public class MainFragment extends Fragment {
private static final String TAG = "MainFragment";
private UiLifecycleHelper uiHelper;
private Session.StatusCallback callback = new Session.StatusCallback() {
#Override
public void call(Session session, SessionState state, Exception exception) {
onSessionStateChange(session, state, exception);
}
};
#Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
uiHelper = new UiLifecycleHelper(getActivity(), callback);
uiHelper.onCreate(savedInstanceState);
View view = inflater.inflate(R.layout.main, container, false);
LoginButton authButton = (LoginButton) view.findViewById(R.id.authButton);
authButton.setReadPermissions(Arrays.asList("public_profile", "email", "user_location"));
authButton.setFragment(this);
return view;
}
private void onSessionStateChange(Session session, SessionState state, Exception exception) {
if (state.isOpened()) {
Log.i(TAG, "Logged in...");
makeMeRequest(session);
} else if (state.isClosed()) {
Log.i(TAG, "Logged out...");
}
}
private void makeMeRequest(final Session session) {
// Make an API call to get user data and define a
// new callback to handle the response.
Request request = Request.newMeRequest(session, new Request.GraphUserCallback() {
/*
* #Override public void onCompleted(GraphUser user, Response
* response) { // If the response is successful if (session ==
* Session.getActiveSession()) { if (user != null) { // Set the
* id for the ProfilePictureView // view that in turn displays
* the profile picture. Log.e("user",user.toString()); } } if
* (response.getError() != null) { // Handle errors, will do so
* later. } }
*/
#Override
public void onCompleted(GraphUser user, Response response) {
// TODO Auto-generated method stub
Log.e("FB Return", user.toString());
Log.e("FullName", user.getName());
Log.e("Id", user.getId());
Log.e("username", "" + user.getUsername());
Log.e("Fname", user.getFirstName());
Log.e("Fname", user.getLastName());
Log.e("gender", user.asMap().get("gender").toString());
String gender = user.asMap().get("gender").toString();
String email = (String) user.asMap().get("email") + "";
Log.e("email", email);
}
});
request.executeAsync();
}
#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);
}
}
Since you are using Social Auth, so you can try this :
private final class ProfileDataListener implements SocialAuthListener {
#Override
public void onExecute(Profile t) {
Log.d("Custom-UI", "Receiving Data");
Profile profileMap = t;
Log.d("Custom-UI", "Validate ID = " + profileMap.getValidatedId());
Log.d("Custom-UI", "First Name = " + profileMap.getFirstName());
Log.d("Custom-UI", "Last Name = " + profileMap.getLastName());
Log.d("Custom-UI", "Email = " + profileMap.getEmail());
Log.d("Custom-UI", "Gender = " + profileMap.getGender());
Log.d("Custom-UI", "Country = " + profileMap.getCountry());
Log.d("Custom-UI", "Language = " + profileMap.getLanguage());
Log.d("Custom-UI", "Location = " + profileMap.getLocation());
Log.d("Custom-UI", "Profile Image URL = " + profileMap.getProfileImageURL()); }
I want to import facebook birthdays of my friends to my app. Currently my app is capable of creating new birthday events. But its very long procedure to add each and every birthday, so instead I want a code to import all facebook friends birthdays to my app. I have used facebook session but get nothing much till now
facebook = new Facebook(Constants.FB_APP_ID);
Session session = new Session(getApplicationContext());
if (session.isOpened()) {
Toast.makeText(getApplicationContext(), session.getState().toString(),
Toast.LENGTH_LONG).show();
} else
Toast.makeText(getApplicationContext(), session.getState().toString(),
Toast.LENGTH_LONG).show();
fbRunner = new AsyncFacebookRunner(facebook);
Also i have created a request
private void importBirthdayFromFB() {
Toast.makeText(getApplicationContext(), "Clicked on fb button",
Toast.LENGTH_LONG).show();
fbRunner.request("maxparera/friends", new RequestListener() {
#SuppressWarnings("unchecked")
#Override
public void onComplete(String response, Object state) {
String keys = "";
try {
JSONObject profile = new JSONObject(response);
// getting name of the user
Iterator<String> keysIterator = profile.keys();
if (keysIterator != null) {
while (keysIterator.hasNext()) {
keys += keysIterator.next().toString();
}
Toast.makeText(getApplicationContext(), keys, Toast.LENGTH_LONG).show();
}
final String name = profile.getString("name");
// getting name of the user
Toast.makeText(getApplicationContext(), Name: " + name, Toast.LENGTH_LONG).show();
} catch (final JSONException e) {
e.printStackTrace();
} catch (final Exception e) {
e.printStackTrace();
}
}
});
But I am not getting any name, instead getting exception, sating OAuthException
Please suggest me ASAP
Maybe your session dont have permission to get your friend's birthday.
You can request permission like below:
LoginButton authButton = (LoginButton) view.findViewById(R.id.authButton);
authButton.setFragment(this);
authButton.setReadPermissions(Arrays.asList("user_friends, read_friendlists));
Layout file:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<com.facebook.widget.LoginButton
android:id="#+id/authButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="30dp"
/>
</LinearLayout>
Note: I uses Facebook SDK 3.8, you can refer to its sample for more detail.
LoginButton is a component of Facebook SDK.
For full of my code:
public class MainFragment extends Fragment {
private static final String TAG = "MainFragment";
private UiLifecycleHelper uiHelper;
private Session.StatusCallback callback = new Session.StatusCallback() {
#Override
public void call(Session session, SessionState state, Exception exception) {
onSessionStateChange(session, state, exception);
Log.i(TAG, "session: " +session.toString());
Log.i(TAG, "state: " +state.toString());
if(exception!=null)
Log.i(TAG, "exception: " +exception.toString());
}
};
#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);
authButton.setFragment(this);
//REQUEST PERMISSION
authButton.setReadPermissions(Arrays.asList("user_friends, read_friendlists));
return view;
}
private void onSessionStateChange(Session session, SessionState state, Exception exception) {
if (state.isOpened()) {
try{
Log.i(TAG, "Logged in...");
Log.i(TAG, "Execute my request");
Request r = new Request(session,"/me/friendlists",null,HttpMethod.GET,new Request.Callback() {
public void onCompleted(Response response) {
Log.i(TAG, "onCompleted");
try {
//I HAD FRIEND LIST
Log.i(TAG, "FRIEND: " + response.getGraphObject().toString());
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
);
r.executeAsync();
Log.i(TAG, "Finish my request");
}catch (Exception ex){
Log.e(TAG, ex.getMessage());
}
} else if (state.isClosed()) {
try{
}
catch(Exception ex){
ex.printStackTrace();
}
Log.i(TAG, "Logged out...");
}
}
#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);
}
}
I am developing an app where it retrieves the current user facebook friends. My Code is working on my device but when I run it on any other devices, its not displaying any results.
Could you please let me know where I am going wrong.
my code is as follows :
public class FaceBook extends Activity implements SearchView.OnQueryTextListener, SearchView.OnCloseListener{
ArrayList<Param> facebook_names = new ArrayList<Param>();
Param name = null;
Names_Adapter adapter;
ListView Names_List;
SearchView searchView;
int check_search =1;
ArrayList<Param>new_names;
private UiLifecycleHelper uiHelper;
private static final int REAUTH_ACTIVITY_CODE = 100;
#SuppressLint("NewApi")
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_face_book);
ActionBar bar = getActionBar();
bar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
bar.setCustomView(R.layout.custom_titlebar);
bar.setBackgroundDrawable(getResources().getDrawable(R.drawable.header));
//bar.setTitle("Main Menu");
bar.setDisplayShowHomeEnabled(true);
bar.setHomeButtonEnabled(true);
uiHelper = new UiLifecycleHelper(this, callback);
uiHelper.onCreate(savedInstanceState);
TextView myTitleText = (TextView) findViewById(R.id.mytext);
if ( myTitleText != null ) {
myTitleText.setText("Facebook");
}
Log.d("COMP", "TEST");
Names_List = (ListView) findViewById(R.id.listView1);
ImageButton reload = (ImageButton) findViewById(R.id.reload);
reload.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent restart = new Intent(FaceBook.this, FaceBook.class);
startActivity(restart);
finish();
}
});
}
#Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REAUTH_ACTIVITY_CODE) {
uiHelper.onActivityResult(requestCode, resultCode, data);
}
}
#Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.face_book, menu);
SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
searchView = (SearchView) findViewById(R.id.searchView1);
searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
searchView.setIconifiedByDefault(false); // Do not iconify the widget; expand it by default
return true;
}
#Override
public boolean onQueryTextSubmit(String arg0) {
// TODO Auto-generated method stub
return false;
}
#Override
public boolean onQueryTextChange(String query) {
// TODO Auto-generated method stub
if(!query.isEmpty())
{
check_search = 0;
new_names = new ArrayList<Param>();
for(int i=0;i<facebook_names.size();i++)
{
if(facebook_names.get(i).getName().toLowerCase().startsWith(query))
{
Param new_param = new Param(facebook_names.get(i).getUrl(),facebook_names.get(i).getName(),facebook_names.get(i).getPic());
new_names.add(new_param);
adapter.notifyDataSetChanged();
}
}
Names_Adapter adapter = new Names_Adapter(FaceBook.this,R.layout.facebook_names_list,new_names);
Names_List.setAdapter(adapter);
adapter.notifyDataSetChanged();
}
else
{
check_search=1;
adapter = new Names_Adapter(FaceBook.this,R.layout.facebook_names_list,facebook_names);
Names_List.setAdapter(adapter);
}
return false;
}
#Override
public boolean onClose() {
// TODO Auto-generated method stub
Names_List.setAdapter(adapter);
return false;
}
#Override
public boolean onOptionsItemSelected(MenuItem item) {
// TODO Auto-generated method stub
int itemId = item.getItemId();
switch (itemId) {
case android.R.id.home:
FaceBook.this.finish();
break;
}
return super.onOptionsItemSelected(item);
}
private void makeRequest(Session session)
{
String fqlQuery = "SELECT uid,name,pic,profile_url FROM user WHERE uid IN " +
"(SELECT uid2 FROM friend WHERE uid1 = me()) ORDER BY first_name";
Bundle params = new Bundle();
params.putString("q", fqlQuery);
session = Session.getActiveSession();
Request request = new Request(session,
"/fql",
params,
HttpMethod.GET,
new Request.Callback(){
public void onCompleted(Response response) {
Log.i("TAG", "Result: " + response.toString());
try{
GraphObject graphObject = response.getGraphObject();
JSONObject jsonObject = graphObject.getInnerJSONObject();
Log.d("data", jsonObject.toString(0));
JSONArray array = jsonObject.getJSONArray("data");
for(int i=0;i<array.length();i++){
JSONObject friend = array.getJSONObject(i);
name = new Param(friend.optString("profile_url"),friend.optString("name"),friend.optString("pic"));
facebook_names.add(name);
// Log.d("uid",friend.getString("uid"));
// Log.d("name", friend.getString("name"));
//Log.d("pic_square",friend.getString("pic_square"));
adapter = new Names_Adapter(FaceBook.this,R.layout.facebook_names_list,facebook_names);
Names_List.setAdapter(adapter);
searchView.setOnQueryTextListener(FaceBook.this);
searchView.setOnCloseListener(FaceBook.this);
Names_List.setOnItemClickListener(new OnItemClickListener() {
#Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
// TODO Auto-generated method stub
Intent intent = new Intent(FaceBook.this,Web_Activity.class);
if(check_search==0)
{
intent.putExtra("WEB",new_names.get(arg2).getUrl());
intent.putExtra("NAME",new_names.get(arg2).getName());
}
else
{
intent.putExtra("WEB",facebook_names.get(arg2).getUrl());
intent.putExtra("NAME",facebook_names.get(arg2).getName());
}
startActivity(intent);
}
});
}
}catch(JSONException e){
e.printStackTrace();
}
}
});
Request.executeBatchAsync(request);
}
private void onSessionStateChange(final Session session, SessionState state, Exception exception) {
if (session != null && session.isOpened()) {
// Get the user's data.
makeRequest(session);
}
}
public void onResume() {
super.onResume();
Session session = Session.getActiveSession();
if (session != null &&
(session.isOpened() || session.isClosed()) ) {
onSessionStateChange(session, session.getState(), null);
}
uiHelper.onResume();
}
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 void onSaveInstanceState(Bundle bundle) {
super.onSaveInstanceState(bundle);
uiHelper.onSaveInstanceState(bundle);
}
#Override
public void onPause() {
super.onPause();
uiHelper.onPause();
}
#Override
public void onDestroy() {
super.onDestroy();
uiHelper.onDestroy();
}
}
I also tried using restFB to access the user Facebook friends.
AccessToken accessToken = new DefaultFacebookClient().obtainAppAccessToken(appid,app secret;
FacebookClient facebookClient = new DefaultFacebookClient(accessToken.getAccessToken());
User user = facebookClient.fetchObject("me", User.class);
When I do this, it gives me an error stating that a valid access token must be used to retrieve user values.
Go to the Facebook Developer site, and under the 'Status and Review' for your app, make it PUBLIC. You can always remove from Public later after your 'temporary' testing is complete.
or
Another way would be to print out the key hashes from each device that you are testing your app on, and add these as key hashes into Settings>Android in the FB developer for your app.
I am trying to login into the Facebook using Facebook sdk .But it not logging in .Its opening the dialog box but after getting the credentials its not working . If i install the Facebook app it opens the Facebook app but login is not completed i cant get the token and user id . I cant post the message to the wall also . But it displays the toast that "message successfully displayed" but it is not posted in the Facebook wall.
Code:
public boolean isSession() {
access_token = sp.getString(TOKEN, "x");
expires = sp.getLong(EXPIRES, -1);
Log.d("TAG", access_token);
if (access_token != null && expires != -1) {
facebook.setAccessToken(access_token);
facebook.setAccessExpires(expires);
}
return facebook.isSessionValid();
}
private class LoginDialogListener implements DialogListener {
#Override
public void onComplete(Bundle values) {
Log.d("TAG", "LoginONComplete");
token =facebook.getAccessToken();
token_expires = facebook.getAccessExpires();
Log.d("TAG", "AccessToken: " + token);
Log.d("TAG", "AccessExpires: " + token_expires);
savePrefs3(EXPIRES,token_expires);
savePrefs(TOKEN,token);
mAsyncRunner.request("me", new IDRequestListener());
}
#Override
public void onFacebookError(FacebookError e) {
Log.d("TAG", "FacebookError: " + e.getMessage());
}
#Override
public void onError(DialogError e) {
Log.d("TAG", "Error: " + e.getMessage());
}
#Override
public void onCancel() {
Log.d("TAG", "OnCancel");
}
}
private class IDRequestListener implements RequestListener {
#Override
public void onComplete(String response, Object state) {
try {
Log.d("TAG", "IDRequestONComplete");
Log.d("TAG", "Response: " + response.toString());
JSONObject json = Util.parseJson(response);
Uid = json.getString("id");
savePrefs("UID", Uid);
final String name = json.getString("name");
} catch (JSONException e) {
Log.d("TAG", "JSONException: " + e.getMessage());
} catch (FacebookError e) {
Log.d("TAG", "FacebookError: " + e.getMessage());
}
}
#Override
public void onIOException(IOException e, Object state) {
// TODO Auto-generated method stub
}
#Override
public void onFileNotFoundException(FileNotFoundException e, Object state) {
// TODO Auto-generated method stub
}
#Override
public void onMalformedURLException(MalformedURLException e, Object state) {
// TODO Auto-generated method stub
}
#Override
public void onFacebookError(FacebookError e, Object state) {
// TODO Auto-generated method stub
}
}
public void postToWall(String message){
Bundle parameters = new Bundle();
parameters.putString("message", message);
parameters.putString("description", "topic share");
try {
facebook.request("me");
String response = facebook.request("me/feed", parameters, "POST");
Log.d("Tests", "got response: " + response);
if (response == null || response.equals("") ||
response.equals("false")) {
showToast("Blank response.");
} else {
showToast("Message posted to your facebook wall!");
}
finish();
} catch (Exception e) {
howToast("Failed to post to wall!");
e.printStackTrace();
finish();
}
}
private void showToast(String message) {
Toast.makeText(getApplicationContext(), message, Toast.LENGTH_SHORT).show();
}
please tell me where i am going wrong . after displaying a toast app gets closed. while loading the fb dialog if i touch the screen it either reloads or switching back to the app window.
Please give immediate reply
The Facebook object is depreciated.You can use the following code in your activity oncreate() method.
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
// setContentView(R.layout.facebook_dialog);
Session.openActiveSession(this, true, new Session.StatusCallback() {
// callback when session changes state
#Override
public void call(Session session, SessionState state, Exception exception) {
if (session.isOpened()) {
// make request to the /me API
Request.executeMeRequestAsync(session, new Request.GraphUserCallback() {
// callback after Graph API response with user object
#Override
public void onCompleted(GraphUser user, Response response) {
if (user == null) {
Toast.makeText(LoginFacebook.this.getApplicationContext(),
"Facebook Error",
Toast.LENGTH_LONG).show();
finish();
}
else
{
Toast.makeText(LoginFacebook.this.getApplicationContext(),
user.getName()+" Logged in Successfully.",
T
Toast.LENGTH_LONG).show();
finish();
}
//login_fb.setEnabled(true);
//progress.setVisibility(View.INVISIBLE);
}
});
}
}
});
}
#Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Session.getActiveSession().onActivityResult(this, requestCode, resultCode, data);
finish();
}
And use the following code in the Manifest.xml file under the application tag.
<meta-data
android:name="com.facebook.sdk.ApplicationId"
android:value="#string/app_id" />
<activity
android:name="com.facebook.LoginActivity"
android:label="#string/app_name" >
</activity>
After Loging in to post to wall you have to call this method...
private void publishStory(String user) {
try {
Session session = Session.getActiveSession();
if (session != null){
// Check for publish permissions
List<String> permissions = session.getPermissions();
if (!isSubsetOf(PERMISSIONS, permissions)) {
pendingPublishReauthorization = true;
Session.NewPermissionsRequest newPermissionsRequest = new Session
.NewPermissionsRequest(this, PERMISSIONS);
session.requestNewPublishPermissions(newPermissionsRequest);
return;
}
Bundle postParams = new Bundle();
postParams.putString("message", messageToPost);
Request.Callback callback= new Request.Callback() {
public void onCompleted(Response response) {
JSONObject graphResponse = response
.getGraphObject()
.getInnerJSONObject();
String postId = null;
try {
postId = graphResponse.getString("id");
} catch (Exception e) {
Log.i("Test",
"JSON error "+ e.getMessage());
}
FacebookRequestError error = response.getError();
if (error != null) {
Toast.makeText(ShareOnFacebook.this
.getApplicationContext(),
error.getErrorMessage(),
Toast.LENGTH_SHORT).show();
} else {
progress.setVisibility(View.INVISIBLE);
toastmessage="Posted Successfully";
Toast.makeText(ShareOnFacebook.this
.getApplicationContext(),
toastmessage,
Toast.LENGTH_SHORT).show();
}
}
};
Request request = new Request(session, user+"/feed", postParams,
HttpMethod.POST, callback);
RequestAsyncTask task = new RequestAsyncTask(request);
task.execute();
}
} catch (Exception e) {
// TODO Auto-generated catch block
Toast.makeText(ShareOnFacebook.this
.getApplicationContext(),
"Facebook Error",
Toast.LENGTH_SHORT).show();
}
}
private boolean isSubsetOf(Collection<String> subset, Collection<String> superset) {
for (String string : subset) {
if (!superset.contains(string)) {
return false;
}
}
return true;
}
and declare the variables as..
private static final List<String> PERMISSIONS = Arrays.asList("publish_actions","manage_pages","publish_stream");
private static final String PENDING_PUBLISH_KEY = "pendingPublishReauthorization";
private boolean pendingPublishReauthorization = false;
Not exactly the answer to your question, but if you are starting to develop your app: usage of Facebook object is deprecated in 3.x API.
In new API you should use Session object, along with UiLifecycleHelper
when I install my app via ADB via Eclipse, then the facebook logon as well as publishing to the wall of the user works (using facebook SDK 3.0), but when I package my app and then install that app, then the facebook logon does not work. I get the fragment with a logon button, when I push the logon button, then it shows the dialog that the app wants to have access to my public profile and friendlist. When I click ok it goes back to the fragment with the login button.
My question is: What should I change to make the facebook SDK integration work during deployment time as well?
my code of the fragment (erased non-relevant parts):
public class Fragment_shareFacebook extends SherlockFragment {
Context context; //context and fields:
View v;
private Button shareButton;
private MainActvityCommunicatorIntentBasedLeaveManagement intentleaveset;
private EditText toshareText;
private TextView textInstructionsOrLink, sharedText, fb_share_title_preview, fb_share_text_preview, sharesubsubtitle;
private ViewSwitcher switcher;
private LinearLayout fb_preview_keeper, mainlayoutholderfbshare, loggedinscreen;
String subject, content;
private boolean switched;
private UiLifecycleHelper uiHelper;
private static final int REAUTH_ACTIVITY_CODE = 100;
private UserSettingsFragment usersetting;
private static final List<String> PERMISSIONS = Arrays.asList("publish_actions");
private Session.StatusCallback callback =
new Session.StatusCallback() {
#Override
public void call(Session session,
SessionState state, Exception exception) {
onSessionStateChange(session, state, exception);
}
};
/**
* empty constructor
*/
public Fragment_shareFacebook(){
}
#Override
/**
* initialize the intentleaveset to inform main that we have an intent based leave standing by
*/
public void onAttach(Activity activity) {
super.onAttach(activity);
context = getActivity();
intentleaveset=(MainActvityCommunicatorIntentBasedLeaveManagement) context;
}
#Override
/**
* get the content that needs to be shared, also retrieve the pendingPublishReauthorization if necessary
*/
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.setHasOptionsMenu(true);
uiHelper = new UiLifecycleHelper(this.getActivity(), callback);
uiHelper.onCreate(savedInstanceState);
subject = getArguments().getString("subject");
content = getArguments().getString("text");
}
#Override
public void onResume() {
super.onResume();
uiHelper.onResume();
Session session = Session.getActiveSession();
this.onSessionStateChange(session, session.getState(), null);
}
#Override
public void onPause() {
super.onPause();
uiHelper.onPause();
}
#Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode==REAUTH_ACTIVITY_CODE){
uiHelper.onActivityResult(requestCode, resultCode, data);
}
}
#Override
public void onDestroy() {
super.onDestroy();
uiHelper.onDestroy();
}
#Override
public void onDestroyView(){
//note: we have to remove the fragment again!
try{
FragmentTransaction transaction = this.getActivity().getSupportFragmentManager().beginTransaction();
transaction.remove(usersetting);
transaction.commit();
}catch(Exception e){
}
super.onDestroyView();
}
#Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
uiHelper.onSaveInstanceState(outState);
}
//hvg: dze even disecten.
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
v = inflater.inflate(R.layout.fragment_facebook_share, container, false);
textInstructionsOrLink = (TextView) v.findViewById(R.id.textInstructionsOrLink);
fb_share_title_preview= (TextView) v.findViewById(R.id.fbsharetitlepreview);
fb_share_text_preview= (TextView) v.findViewById(R.id.fbsharetextpreview);
sharesubsubtitle=(TextView) v.findViewById(R.id.sharesubsubtitle);
loggedinscreen=(LinearLayout) v.findViewById(R.id.loggedinscreen);
usersetting=(UserSettingsFragment) this.getActivity().getSupportFragmentManager().findFragmentById(R.id.userSettingsFragment);
//authButton = (LoginButton) v.findViewById(R.id.authButton);
shareButton = (Button) v.findViewById(R.id.shareButton);
//usernamefield= (TextView) v.findViewById(R.id.selection_user_name);
toshareText = (EditText) v.findViewById(R.id.toshareText);
fb_preview_keeper= (LinearLayout) v.findViewById(R.id.fb_preview_keeper);
mainlayoutholderfbshare = (LinearLayout) v.findViewById(R.id.mainlayoutholderfbshare);
switcher=(ViewSwitcher)v.findViewById(R.id.fb_switcher);
mainlayoutholderfbshare.setOnTouchListener(new View.OnTouchListener() {
#Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
if(toshareText.isFocused()){
Log.i("Focussed", "--" + event.getX() + " : " + event.getY() + "--");
if (toshareText.isFocused()) {
Rect outRect = new Rect();
toshareText.getGlobalVisibleRect(outRect);
if (!outRect.contains((int)event.getRawX(), (int)event.getRawY())) {
toshareText.clearFocus();
InputMethodManager imm = (InputMethodManager) v.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
}
}
}
Log.i("X-Y coordinate", "--" + event.getX() + " : " + event.getY() + "--");
//Toast.makeText(getBaseContext(), "Clicked", Toast.LENGTH_SHORT).show();
return false;
}
});
//toshareText.setText(content);
switcher=(ViewSwitcher) v.findViewById(R.id.fb_switcher);
sharedText=(TextView) v.findViewById(R.id.sharedText);
if(switcher.getDisplayedChild()==0){
switched=false;
}else{
switched=true;
}
//note that we need a custom onclicklistener to share the story to fb
shareButton.setOnClickListener(new OnClickListener(){
#Override
public void onClick(View v) {
intentleaveset.setIntentleave(true);
publishStory();
}
});
//note to main: we are leaving with an intent!
intentleaveset.setIntentleave(true);
Log.d("fsf: leaveintent","settrue");
Session session = Session.getActiveSession();
SessionState state = Session.getActiveSession().getState();
onSessionStateChange(session, state, null);
return v;
}
private void onSessionStateChange(Session session, SessionState state, Exception exception) {
// Only make changes if the activity is visible
intentleaveset.setIntentleave(true);
Log.d("switcher-init", Integer.toString(switcher.getDisplayedChild()));
if (state.isOpened()) {
// If the session state is open:
// Show the authenticated fragment
shareButton.setVisibility(View.VISIBLE);
toshareText.setVisibility(View.VISIBLE);
fb_preview_keeper.setVisibility(View.VISIBLE);
LayoutParams params = fb_preview_keeper.getLayoutParams();
params.height=LayoutParams.WRAP_CONTENT;
params.width=LayoutParams.MATCH_PARENT;
fb_preview_keeper.setLayoutParams(params);
params=shareButton.getLayoutParams();
params.height=LayoutParams.WRAP_CONTENT;
params.width=LayoutParams.MATCH_PARENT;
shareButton.setLayoutParams(params);
params=toshareText.getLayoutParams();
params.width=LayoutParams.MATCH_PARENT;
params.height=LayoutParams.WRAP_CONTENT;
toshareText.setLayoutParams(params);
toshareText.setMinLines(3);
toshareText.setScroller(new Scroller(context));
toshareText.setVerticalScrollBarEnabled(true);
fb_share_title_preview.setText(subject);
fb_share_text_preview.setText(getString(R.string.facebook_share_subtitle).concat("\n \n").concat(content));
if(!switched){
textInstructionsOrLink.setText(getString(R.string.facebookexplanationafterlgoong));
}else{
textInstructionsOrLink.setText(getString(R.string.facebookexplanationaftershared));
if(switcher.getDisplayedChild()!=1){
switcher.showNext();
}
/*
if(switcher.getDisplayedChild()==1){
switcher.showPrevious();
}else{
switcher.showNext();
}
*/
}
params=loggedinscreen.getLayoutParams();
params.height=LayoutParams.WRAP_CONTENT;
loggedinscreen.setLayoutParams(params);
sharesubsubtitle.setFocusable(true);
sharesubsubtitle.requestFocus();
} else {
// If the session state is closed:
// Show the login fragment
if(switcher.getDisplayedChild()==1){
switcher.showPrevious();
}
switched=false;
shareButton.setVisibility(View.INVISIBLE);
//shareButton.setHeight(0);
toshareText.setVisibility(View.INVISIBLE);
//toshareText.setHeight(0);
//LayoutParams params = switcher.getLayoutParams();
//params.height=0;
//params.width=params.MATCH_PARENT;
//switcher.setLayoutParams(params);
//fb_preview_keeper.setVisibility(View.INVISIBLE);
//params = fb_preview_keeper.getLayoutParams();
//params.height=0;
//params.width=params.MATCH_PARENT;
//fb_preview_keeper.setLayoutParams(params);
LayoutParams params=loggedinscreen.getLayoutParams();
params.height=0;
loggedinscreen.setLayoutParams(params);
sharedText.setText("");
textInstructionsOrLink.setText(this.getResources().getString(R.string.facebookexplainbeforelogon));
}
}
private void publishStory() {
Session session = Session.getActiveSession();
if (session != null){
// Check for publish permissions
List<String> permissions = session.getPermissions();
if (!isSubsetOf(PERMISSIONS, permissions)) {
Session.NewPermissionsRequest newPermissionsRequest = new Session
.NewPermissionsRequest(this, PERMISSIONS)
.setRequestCode(REAUTH_ACTIVITY_CODE);
session.requestNewPublishPermissions(newPermissionsRequest);
//session.reauthorizeForPublish(newPermissionsRequest);
return;
}
Bundle postParams = new Bundle();
postParams.putString("name", subject);
postParams.putString("caption", getString(R.string.facebook_share_subtitle));
postParams.putString("description", content);
if(toshareText.getText()!=null){
postParams.putString("message", toshareText.getText().toString());
}else{
postParams.putString("message", " ");
}
postParams.putString("link", "http://www.thewonderweeks.com");
postParams.putString("picture", "www.thewonderweeks.com/apple-touch-icon-114x114.png");
Request.Callback callback= new Request.Callback() {
public void onCompleted(Response response) {
JSONObject graphResponse;
try{
graphResponse = response
.getGraphObject()
.getInnerJSONObject();
}catch (Exception e){
if(e.getMessage()!=null){
Log.d("errorinFBcallback", e.getMessage());
}
return ;
}
String postId = null;
try {
postId = graphResponse.getString("id");
} catch (JSONException e) {
Log.i("errormessagefacebookfragmenthtingy",
"JSON error "+ e.getMessage());
}
FacebookRequestError error = response.getError();
if (error != null) {
Toast.makeText(getActivity()
.getApplicationContext(),
error.getErrorMessage(),
Toast.LENGTH_SHORT).show();
} else {
Log.d("post id of posted material", postId);
shareButton.setVisibility(View.INVISIBLE);
if(switcher.getDisplayedChild()!=1){
switcher.showNext();
}
switched=true;
sharedText.setText(getString(R.string.successhare).concat(" ").concat(toshareText.getText().toString()));
textInstructionsOrLink.setText(getString(R.string.facebookexplanationaftershared));
}
}
};
Request request = new Request(session, "me/feed", postParams,
HttpMethod.POST, callback);
RequestAsyncTask task = new RequestAsyncTask(request);
task.execute();
}
}
I assume you followed the facebook developers tutorial. If so, you use this command to produce your key
keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | openssl sha1 -binary | openssl base64
You must also create a key with release keystore and register it to facebook.