Android版Facebook的整合 - predefined的墙后 [英] Android Facebook Integration - Predefined Wall Post

查看:144
本文介绍了Android版Facebook的整合 - predefined的墙后的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想将功能添加到我的应用程序,用户可以在与他们的朋友,他们都在使用我的应用程序共享。我想要的职位有一个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()){
                postFacebookMes​​sage();
            }其他{
                facebook.authorize(YourActivity.this,新的String [] {publish_stream},新FacebookAuthListener(){
                    @覆盖
                    公共无效的onComplete(束值){
                        postFacebookMes​​sage();
                    }
                });
            }
        }
    });    ...
}

和把这种方法在你的活动:

 私人无效postFacebookMes​​sage(){
    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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆