Android版Facebook的整合 - predefined的墙后 [英] Android Facebook Integration - Predefined Wall Post
问题描述
我想将功能添加到我的应用程序,用户可以在与他们的朋友,他们都在使用我的应用程序共享。我想要的职位有一个predefined消息,但所有我能得到的工作是从我的应用程序正规职。有反正我可以做到这一点,也许与映像。但是这并不重要,重要..任何想法?
下面就是我处理与Facebook(登录和发帖)的一切:
公共类FacebookSSO延伸活动{正在使用Facebook =新的Facebook(APP_ID);
私人共享preferences米preFS;
私有静态最后弦乐TAG =FacebookConnect;
私有静态最后弦乐味精=签名在使用MNWV对于Android的 - 瞧瞧吧!@覆盖
公共无效的onCreate(捆绑savedInstanceState){
super.onCreate(savedInstanceState);
的setContentView(R.layout.main);
/ *
*可获得现有ACCESS_TOKEN如果有的话
* /
米preFS = GET preferences(MODE_PRIVATE);
字符串的access_token = M prefs.getString(的access_token,NULL);
长到期= M prefs.getLong(access_expires,0);
如果(ACCESS_TOKEN!= NULL){
facebook.setAccessToken(的access_token);
}
如果(到期!= 0){
facebook.setAccessExpires(到期);
} / *
*只有调用授权,如果的access_token已过期。
* /
如果(!facebook.isSessionValid()){ facebook.dialog(这一点,OAuth的新DialogListener(){
@覆盖
公共无效的onComplete(束值){
共享preferences.Editor编辑= M prefs.edit();
editor.putString(的access_token,facebook.getAccessToken());
editor.putLong(access_expires,facebook.getAccessExpires());
editor.commit();
捆绑参数=新包();
parameters.putString(TAG,味精); //消息张贴到墙上 facebook.dialog(FacebookSSO.thisstream.publish,参数,新DialogListener(){
@覆盖
公共无效的onComplete(束值){
共享preferences.Editor编辑= M prefs.edit();
editor.putString(的access_token,facebook.getAccessToken());
editor.putLong(access_expires,facebook.getAccessExpires());
editor.commit(); 在意向=新意图(FacebookSSO.this,MNWVMainScreen.class);
startActivity(在);
} @覆盖
公共无效onFacebookError(FacebookError错误){} @覆盖
公共无效onerror的(DialogError E){} @覆盖
公共无效onCancel(){} });
} @覆盖
公共无效onFacebookError(FacebookError错误){} @覆盖
公共无效onerror的(DialogError E){} @覆盖
公共无效onCancel(){}
}); }
}@覆盖
公共无效的onActivityResult(INT申请code,INT结果code,意图数据){
super.onActivityResult(要求code,结果code,数据); facebook.authorizeCallback(要求code,结果code,数据);
}
}
假设你要发送邮件给Facebook上按一下按钮。
@覆盖
保护无效的onCreate(捆绑savedInstanceState){ ... 按钮sharebutton =(按钮)findViewById(R.id.share_button);
sharebutton.setOnClickListener(新OnClickListener(){
@覆盖
公共无效的onClick(视图v){
如果(facebook.isSessionValid()){
postFacebookMessage();
}其他{
facebook.authorize(YourActivity.this,新的String [] {publish_stream},新FacebookAuthListener(){
@覆盖
公共无效的onComplete(束值){
postFacebookMessage();
}
});
}
}
}); ...
}
和把这种方法在你的活动:
私人无效postFacebookMessage(){
AsyncFacebookRunner mAsyncRunner =新AsyncFacebookRunner(脸谱);
捆绑PARAMS =新包();
params.putString(信息,我是用伟大的应用程序!);
params.putString(图片,http://mysite.com/logo.jpg);
mAsyncRunner.request(ME /饲料,则params,POST,新FacebookPostListener(),NULL);
}
和添加此类:
进口java.io.FileNotFoundException;
进口java.io.IOException异常;
进口java.net.MalformedURLException;进口android.util.Log;进口com.facebook.android.FacebookError;
进口com.facebook.android.AsyncFacebookRunner.RequestListener;公共类FacebookPostListener实现RequestListener {
私有静态最后弦乐TAG =FacebookPostListener; @覆盖
公共无效的onComplete(最后字符串的响应,最终对象的状态){
Log.d(TAG,脸谱发表的帖子得到了回应:+响应);
} @覆盖
公共无效onFacebookError(FacebookError E,最终对象的状态){
Log.e(TAG,e.getMessage(),E);
} @覆盖
公共无效onFileNotFoundException(FileNotFoundException异常E,最终对象的状态){
Log.e(TAG,e.getMessage(),E);
} @覆盖
公共无效onIOException(IOException异常E,最终对象的状态){
Log.e(TAG,e.getMessage(),E);
} @覆盖
公共无效onMalformedURLException(MalformedURLException的E,最终对象的状态){
Log.e(TAG,e.getMessage(),E);
}
}
和这样的:
进口android.os.Bundle;
进口android.util.Log;进口com.facebook.android.DialogError;
进口com.facebook.android.Facebook.DialogListener;
进口com.facebook.android.FacebookError;公共类FacebookAuthListener实现DialogListener { 私有静态最后弦乐TAG = FacebookAuthListener.class.getSimpleName(); @覆盖
公共无效onFacebookError(FacebookError E){
Log.e(TAG,e.getMessage(),E);
} @覆盖
公共无效onerror的(DialogError E){
Log.e(TAG,e.getMessage(),E);
} @覆盖
公共无效的onComplete(束值){
} @覆盖
公共无效onCancel(){
// 没做什么
}
}
我想这是所有:)
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);
}
}
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 :)
这篇关于Android版Facebook的整合 - predefined的墙后的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!