Java Android Facebook集成-预定义的墙贴
我想向我的应用程序添加功能,用户可以在其中与朋友共享他们正在使用我的应用程序。我希望帖子有一个预定义的消息,但我能做的就是从我的应用程序中定期发布帖子。无论如何,我都可以做到这一点,也许还有一个图像。但那没那么重要。。有什么想法吗 在这里,我可以处理Facebook登录和发布的所有事情:Java Android Facebook集成-预定义的墙贴,java,android,facebook,integration,Java,Android,Facebook,Integration,我想向我的应用程序添加功能,用户可以在其中与朋友共享他们正在使用我的应用程序。我希望帖子有一个预定义的消息,但我能做的就是从我的应用程序中定期发布帖子。无论如何,我都可以做到这一点,也许还有一个图像。但那没那么重要。。有什么想法吗 在这里,我可以处理Facebook登录和发布的所有事情: public class FacebookSSO extends Activity { Facebook facebook = new Facebook("APP_ID"); private SharedPr
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
}
}
我想就这些:假设你想通过点击按钮向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
}
}
我想就这些:我只是使用:
public void inviteSomeone(View view) {
Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("text/plain");
Intent chooser = Intent.createChooser(intent, "Pick your app");
String shareSub = "This App is cool!";
intent.putExtra(Intent.EXTRA_TEXT, shareSub);
}
对于XML中的按钮:
<!--for the Invite button-->
<Button
android:id="@+id/btnInvite"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:onClick="inviteSomeone"
android:text="@string/btnInvite" />
它将适用于WhatsApp、短信、Facebook墙贴等。在这种情况下,使用预定义的文本:这个应用很酷 我只是使用:
public void inviteSomeone(View view) {
Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("text/plain");
Intent chooser = Intent.createChooser(intent, "Pick your app");
String shareSub = "This App is cool!";
intent.putExtra(Intent.EXTRA_TEXT, shareSub);
}
对于XML中的按钮:
<!--for the Invite button-->
<Button
android:id="@+id/btnInvite"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:onClick="inviteSomeone"
android:text="@string/btnInvite" />
它将适用于WhatsApp、短信、Facebook墙贴等。在这种情况下,使用预定义的文本:这个应用很酷 我试着把它放在不同的地方来让它工作,但是不管我把它放在哪里,我总是会得到一个NullPointerException。我应该把第一块代码放在哪里?我不熟悉Android,尤其是Facebook集成。我把它放了几个地方,但没有结果?第一部分应该放在哪里?当我把它放在那里,它似乎要发布,不是吗?日志猫显示如下:Facebook发布了这篇文章。获取响应:{错误:{消息:必须使用活动访问令牌查询有关当前用户的信息,类型:OAutheException}}已更改我的答案。我想我完全回答了你的问题。是吗?是的,这正是我要问的!但是使用您添加的代码,我得到以下错误:FacebookAuthListener无法解析为类型。FacebookActivity,String[],Facebook.DialogListener类型中的方法authorizeActivity不适用于参数Facebookso,String[],new FacebookAuthListener{},因此您可以在我的应用程序的主屏幕上尝试更好地理解这一点,单击此按钮时,菜单选项为“共享”,它会将您发送到“我的问题”中的活动。我希望用户点击它,它会在他们的墙上贴出一条帖子,说他们正在使用这个应用。我试着把它放在不同的地方,让它工作,但不管我把它放在哪里,我都会得到一个NullPointerException。我应该把第一块代码放在哪里?我不熟悉Android,尤其是Facebook集成。我把它放了几个地方,但没有结果?第一部分应该放在哪里?当我把它放在那里,它似乎要发布,不是吗?日志猫显示如下:Facebook发布了这篇文章。获取响应:{错误:{消息:必须使用活动访问令牌查询有关当前用户的信息,类型:OAutheException}}已更改我的答案。我想我完全回答了你的问题。是吗?是的,这正是我要问的!但是使用您添加的代码,我得到以下错误:FacebookAuthListener无法解析为类型。FacebookActivity,String[],Facebook.DialogListener类型中的方法authorizeActivity不适用于参数Facebookso,String[],new FacebookAuthListener{},因此您可以在我的应用程序的主屏幕上尝试更好地理解这一点,单击此按钮时,菜单选项为“共享”,它会将您发送到“我的问题”中的活动。我想让用户点击它,它会在他们的墙上贴一个帖子,说他们正在使用这个应用程序。