【问题标题】:Android Facebook Integration - Predefined Wall PostAndroid Facebook 集成 - 预定义墙贴
【发布时间】:2012-01-04 11:55:06
【问题描述】:

我想向我的应用添加功能,用户可以在其中与他们的朋友分享他们正在使用我的应用。我希望帖子有一个预定义的消息,但我能得到的只是来自我的应用程序的常规帖子。无论如何我可以做到这一点,也许还有图像。但这并不重要.. 有什么想法吗?

这是我使用 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);
}
}

【问题讨论】:

    标签: java android facebook integration


    【解决方案1】:

    假设您想在单击按钮时向 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
        }
    }
    

    我想就是这样:)

    【讨论】:

    • 我尝试将它放在不同的地方以使其正常工作,但无论我把它放在哪里,我都会收到 NullPointerException。
    • 我应该把第一块代码放在哪里?我是 Android 新手,尤其是 Facebook 集成。我把它放了几个地方,没有结果?第一部分应该去哪里?
    • 当我把它放在那里并且它似乎发布(这不是)日志猫显示以下内容:Facebook published the post. Got response: {"error":{"message":"An active access token must be used to query information about the current user.","type":"OAuthException"}}
    • 改变了我的答案。我想我完全回答了你的问题。我是吗?
    • 是的,这正是我要问的!但是...使用您添加的代码,我收到以下错误:“FacebookAuthListener 无法解析为类型。”、“Facebook 类型中的方法 authorize(Activity, String[], Facebook.DialogListener) 不适用对于参数 (FacebookSSO, String[], new FacebookAuthListener(){})”因此您可以尝试更好地理解这一点,在我的应用程序的主屏幕上,当您单击此菜单选项时,它会将您发送到我的问题中的活动。我希望用户点击它,然后它会在他们的墙上发布一个帖子,说他们正在使用这个应用程序。
    【解决方案2】:

    我只是使用:

      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 墙贴等...在这种情况下使用预定义的文本:“这个应用很酷!”

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-04
      • 2012-05-08
      • 1970-01-01
      相关资源
      最近更新 更多