Android Facebook集成

编程入门 行业动态 更新时间:2024-10-23 20:24:28
Android Facebook集成 - 预定义墙贴(Android Facebook Integration - Predefined Wall Post)

我想添加功能到我的应用程序,用户可以与他们的朋友分享他们正在使用我的应用程序。 我希望帖子有一个预定义的消息,但我可以工作的是从我的应用程序的常规帖子。 无论如何,我可以做到这一点,也可以与图像。 但那不重要..任何想法?

这里是我用Facebook处理所有事情的地方(登录和发布):

public class FacebookSSO extends Activity { Facebook facebook = new Facebook("APP_ID"); private SharedPreferences mPrefs; private static final String TAG = "FacebookConnect"; private static final String MSG = "Signed In Using MNWV For Android - Check It Out!"; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); /* * Get existing access_token if any */ mPrefs = getPreferences(MODE_PRIVATE); String access_token = mPrefs.getString("access_token", null); long expires = mPrefs.getLong("access_expires", 0); if(access_token != null) { facebook.setAccessToken(access_token); } if(expires != 0) { facebook.setAccessExpires(expires); } /* * Only call authorize if the access_token has expired. */ if(!facebook.isSessionValid()) { facebook.dialog(this, "oauth", new DialogListener() { @Override public void onComplete(Bundle values) { SharedPreferences.Editor editor = mPrefs.edit(); editor.putString("access_token", facebook.getAccessToken()); editor.putLong("access_expires", facebook.getAccessExpires()); editor.commit(); Bundle parameters = new Bundle(); parameters.putString(TAG, MSG);// the message to post to the wall facebook.dialog(FacebookSSO.this, "stream.publish", parameters, new DialogListener() { @Override public void onComplete(Bundle values) { SharedPreferences.Editor editor = mPrefs.edit(); editor.putString("access_token", facebook.getAccessToken()); editor.putLong("access_expires", facebook.getAccessExpires()); editor.commit(); Intent in = new Intent(FacebookSSO.this, MNWVMainScreen.class); startActivity(in); } @Override public void onFacebookError(FacebookError error) {} @Override public void onError(DialogError e) {} @Override public void onCancel() {} }); } @Override public void onFacebookError(FacebookError error) {} @Override public void onError(DialogError e) {} @Override public void onCancel() {} }); } } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); facebook.authorizeCallback(requestCode, resultCode, data); } }

I want to add functionality to my app where a user can share with their friends that they are using my app. I want the post to have a predefined message, but all I can get working is a regular post from my app. Is there anyway I can do this and maybe with an image as well. but that's not as important.. Any ideas?

Here's where I handle everything with Facebook (Logging in AND Posting):

public class FacebookSSO extends Activity { Facebook facebook = new Facebook("APP_ID"); private SharedPreferences mPrefs; private static final String TAG = "FacebookConnect"; private static final String MSG = "Signed In Using MNWV For Android - Check It Out!"; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); /* * Get existing access_token if any */ mPrefs = getPreferences(MODE_PRIVATE); String access_token = mPrefs.getString("access_token", null); long expires = mPrefs.getLong("access_expires", 0); if(access_token != null) { facebook.setAccessToken(access_token); } if(expires != 0) { facebook.setAccessExpires(expires); } /* * Only call authorize if the access_token has expired. */ if(!facebook.isSessionValid()) { facebook.dialog(this, "oauth", new DialogListener() { @Override public void onComplete(Bundle values) { SharedPreferences.Editor editor = mPrefs.edit(); editor.putString("access_token", facebook.getAccessToken()); editor.putLong("access_expires", facebook.getAccessExpires()); editor.commit(); Bundle parameters = new Bundle(); parameters.putString(TAG, MSG);// the message to post to the wall facebook.dialog(FacebookSSO.this, "stream.publish", parameters, new DialogListener() { @Override public void onComplete(Bundle values) { SharedPreferences.Editor editor = mPrefs.edit(); editor.putString("access_token", facebook.getAccessToken()); editor.putLong("access_expires", facebook.getAccessExpires()); editor.commit(); Intent in = new Intent(FacebookSSO.this, MNWVMainScreen.class); startActivity(in); } @Override public void onFacebookError(FacebookError error) {} @Override public void onError(DialogError e) {} @Override public void onCancel() {} }); } @Override public void onFacebookError(FacebookError error) {} @Override public void onError(DialogError e) {} @Override public void onCancel() {} }); } } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); facebook.authorizeCallback(requestCode, resultCode, data); } }

最满意答案

假设你想通过按钮点击发送消息给Facebook。

@Override protected void onCreate(Bundle savedInstanceState) { ... Button sharebutton = (Button) findViewById(R.id.share_button); sharebutton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if (facebook.isSessionValid()) { postFacebookMessage(); } else { facebook.authorize(YourActivity.this, new String[] {"publish_stream"}, new FacebookAuthListener() { @Override public void onComplete(Bundle values) { postFacebookMessage(); } }); } } }); ... }

把这个方法放在你的活动中:

private void postFacebookMessage() { AsyncFacebookRunner mAsyncRunner = new AsyncFacebookRunner(facebook); Bundle params = new Bundle(); params.putString("message", "I am using great App!"); params.putString("picture", "http://mysite.com/logo.jpg"); mAsyncRunner.request("me/feed", params, "POST", new FacebookPostListener(), null); }

并添加这个类:

import java.io.FileNotFoundException; import java.io.IOException; import java.net.MalformedURLException; import android.util.Log; import com.facebook.android.FacebookError; import com.facebook.android.AsyncFacebookRunner.RequestListener; public class FacebookPostListener implements RequestListener { private static final String TAG = "FacebookPostListener"; @Override public void onComplete(final String response, final Object state) { Log.d(TAG, "Facebook published the post. Got response: " + response); } @Override public void onFacebookError(FacebookError e, final Object state) { Log.e(TAG, e.getMessage(), e); } @Override public void onFileNotFoundException(FileNotFoundException e, final Object state) { Log.e(TAG, e.getMessage(), e); } @Override public void onIOException(IOException e, final Object state) { Log.e(TAG, e.getMessage(), e); } @Override public void onMalformedURLException(MalformedURLException e, final Object state) { Log.e(TAG, e.getMessage(), e); } }

和这个:

import android.os.Bundle; import android.util.Log; import com.facebook.android.DialogError; import com.facebook.android.Facebook.DialogListener; import com.facebook.android.FacebookError; public class FacebookAuthListener implements DialogListener { private static final String TAG = FacebookAuthListener.class.getSimpleName(); @Override public void onFacebookError(FacebookError e) { Log.e(TAG, e.getMessage(), e); } @Override public void onError(DialogError e) { Log.e(TAG, e.getMessage(), e); } @Override public void onComplete(Bundle values) { } @Override public void onCancel() { // Do nothing } }

我认为这就是全部:)

Suppose that you want to send message to Facebook on button click.

@Override protected void onCreate(Bundle savedInstanceState) { ... Button sharebutton = (Button) findViewById(R.id.share_button); sharebutton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if (facebook.isSessionValid()) { postFacebookMessage(); } else { facebook.authorize(YourActivity.this, new String[] {"publish_stream"}, new FacebookAuthListener() { @Override public void onComplete(Bundle values) { postFacebookMessage(); } }); } } }); ... }

And put this method in your activity:

private void postFacebookMessage() { AsyncFacebookRunner mAsyncRunner = new AsyncFacebookRunner(facebook); Bundle params = new Bundle(); params.putString("message", "I am using great App!"); params.putString("picture", "http://mysite.com/logo.jpg"); mAsyncRunner.request("me/feed", params, "POST", new FacebookPostListener(), null); }

And add this class:

import java.io.FileNotFoundException; import java.io.IOException; import java.net.MalformedURLException; import android.util.Log; import com.facebook.android.FacebookError; import com.facebook.android.AsyncFacebookRunner.RequestListener; public class FacebookPostListener implements RequestListener { private static final String TAG = "FacebookPostListener"; @Override public void onComplete(final String response, final Object state) { Log.d(TAG, "Facebook published the post. Got response: " + response); } @Override public void onFacebookError(FacebookError e, final Object state) { Log.e(TAG, e.getMessage(), e); } @Override public void onFileNotFoundException(FileNotFoundException e, final Object state) { Log.e(TAG, e.getMessage(), e); } @Override public void onIOException(IOException e, final Object state) { Log.e(TAG, e.getMessage(), e); } @Override public void onMalformedURLException(MalformedURLException e, final Object state) { Log.e(TAG, e.getMessage(), e); } }

And this:

import android.os.Bundle; import android.util.Log; import com.facebook.android.DialogError; import com.facebook.android.Facebook.DialogListener; import com.facebook.android.FacebookError; public class FacebookAuthListener implements DialogListener { private static final String TAG = FacebookAuthListener.class.getSimpleName(); @Override public void onFacebookError(FacebookError e) { Log.e(TAG, e.getMessage(), e); } @Override public void onError(DialogError e) { Log.e(TAG, e.getMessage(), e); } @Override public void onComplete(Bundle values) { } @Override public void onCancel() { // Do nothing } }

I think that's all :)

更多推荐

本文发布于:2023-08-07 02:56:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1460016.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:Android   Facebook

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!