是否有任何广泛使用的Android应用程序与预先填充的文本字段共享Facebook?

时间:2015-05-26 14:52:06

标签: android android-facebook shareactionprovider

我正在为小型企业主创建一个Android应用。我已经使用ShareActionProvider实现了社交共享,我发现Facebook 故意不允许应用程序预先填充帖子。用户必须输入自己的文本。 (见this S.O. post然后this S.O. post)。

多个S.O.答案表明,通过使用Facebook SDK,可以实现这一结果(预先填充Facebook帖子)。

另一方面,我了解到Facebook [[{3}}(一项政策)反对这样做。

我的问题是:
1)这真的有可能吗?    如果是这样,与SharActionProvider相比,实施起来有多难?

2)是否有任何流行或主要应用程序的Facebook共享功能为用户预先填充文本?

3)Facebook是否已经知道打击这一政策?他们对打破这一政策的人采取了什么行动?

这是我创建的第一个Android应用程序,也是我在'现实生活'中完成的第一个项目。我试图弄清楚添加此功能是否值得他的业务。他表示,他希望此功能为用户创建一种简单的方式来共享内容。

2 个答案:

答案 0 :(得分:1)

在我的应用中,我分享了各种知名人士对社交媒体的引用。我集成了Facebook SDK,使用户可以在墙上分享它。我没有遇到任何来自Facebook的打击行为。截至目前,应用程序已被5K人使用。

所以回答你的问题,

  1. 是的,有可能。不难实施

  2. 我不知道其他使用此功能的热门应用

  3. FB没有打击或行动

  4. 这就是我在用户的FB墙上分享报价的方法。

    public void onClickFBShare(View view) {
    		quotview = (TextView) findViewById(R.id.MainText);
    		line = quotview.getText().toString(); //converting the text to String
    		Intent FBIntent = new Intent("android.intent.action.SHAREHELPER");
    		FBIntent.putExtra("quote", line);
    		startActivity(FBIntent);
    	}

    发布内容的代码位于Sharehelper.Java

    import java.security.MessageDigest;
    import java.security.NoSuchAlgorithmException;
    import java.util.Arrays;
    import java.util.List;
    
    import android.content.Intent;
    import android.content.pm.PackageInfo;
    import android.content.pm.PackageManager;
    import android.content.pm.PackageManager.NameNotFoundException;
    import android.content.pm.Signature;
    import android.graphics.Bitmap;
    import android.graphics.BitmapFactory;
    import android.os.Bundle;
    import android.support.v7.app.ActionBarActivity;
    import android.util.Base64;
    import android.util.Log;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.TextView;
    import android.widget.Toast;
    
    
    import com.facebook.Request;
    import com.facebook.Response;
    import com.facebook.Session;
    import com.facebook.SessionState;
    import com.facebook.UiLifecycleHelper;
    import com.facebook.model.GraphUser;
    import com.facebook.widget.LoginButton;
    import com.facebook.widget.LoginButton.UserInfoChangedCallback;
    
    
    public class ShareHelper extends ActionBarActivity{
    
    	    private LoginButton loginBtn;
    	    private Button updateStatusBtn;
    	 
    	    private TextView fbquote;
    	    
    	    private TextView userName;
    	 
    	    private UiLifecycleHelper uiHelper;
    	 
    	    private static final List<String> PERMISSIONS = Arrays.asList("publish_actions");
    	    
    	    private String message;
    	    
    	    public void onCreate(Bundle savedInstanceState) {
    	        super.onCreate(savedInstanceState);
    	        
    	     // Add code to print out the key hash
    	        try {
    	            PackageInfo info = getPackageManager().getPackageInfo(
    	                    "com.facebook.samples.hellofacebook", 
    	                    PackageManager.GET_SIGNATURES);
    	            for (Signature signature : info.signatures) {
    	                MessageDigest md = MessageDigest.getInstance("SHA");
    	                md.update(signature.toByteArray());
    	                Log.d("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT));
    	                }
    	        } catch (NameNotFoundException e) {
    
    	        } catch (NoSuchAlgorithmException e) {
    
    	        }
    
    	        
    	        Intent intent = getIntent();
    		    
    		    message = intent.getStringExtra("quote");     
    		 	
    	 
    	        uiHelper = new UiLifecycleHelper(this, statusCallback);
    	        uiHelper.onCreate(savedInstanceState);
    	 
    	        setContentView(R.layout.sharehelper_activity);
    	    
    	        fbquote = (TextView)findViewById(R.id.FbTextView);
    	        fbquote.setText(message);
    	        
    	        userName = (TextView) findViewById(R.id.user_name);
    	        loginBtn = (LoginButton) findViewById(R.id.fb_login_button);
    	        loginBtn.setUserInfoChangedCallback(new UserInfoChangedCallback() {
    	            @Override
    	            public void onUserInfoFetched(GraphUser user) {
    	                if (user != null) {
    	                    userName.setText("Hello, " + user.getName());
    	                } else {
    	                    userName.setText("You are not logged");
    	                }
    	            }
    	        });
    	 
    	        updateStatusBtn = (Button) findViewById(R.id.update_status);
    	        updateStatusBtn.setOnClickListener(new OnClickListener() {
    	 
    	            @Override
    	            public void onClick(View v) {
    	            	postStatusMessage();
    	            }
    	        });
    	 
    	        buttonsEnabled(false);
    	    }
    	 
    	    private Session.StatusCallback statusCallback = new Session.StatusCallback() {
    	        @Override
    	        public void call(Session session, SessionState state,
    	                Exception exception) {
    	            if (state.isOpened()) {
    	                buttonsEnabled(true);
    	                Log.d("FacebookSampleActivity", "Facebook session opened");
    	            } else if (state.isClosed()) {
    	                buttonsEnabled(false);
    	                Log.d("FacebookSampleActivity", "Facebook session closed");
    	            }
    	        }
    	    };
    	 
    	    public void buttonsEnabled(boolean isEnabled) {
    	        updateStatusBtn.setEnabled(isEnabled);
    	    }
    	 
    	   
    	    public void postStatusMessage() {
    	        if (checkPermissions()) {
    	            Request request = Request.newStatusUpdateRequest(
    	                    Session.getActiveSession(), message,
    	                    new Request.Callback() {
    	                        @Override
    	                        public void onCompleted(Response response) {
    	                            if (response.getError() == null)
    	                                Toast.makeText(ShareHelper.this,
    	                                        "Quote Shared successfully",
    	                                        Toast.LENGTH_LONG).show();
    	                        }
    	                    });
    	            request.executeAsync();
    	        } else {
    	            requestPermissions();
    	        }
    	    }
    	 
    	    public boolean checkPermissions() {
    	        Session s = Session.getActiveSession();
    	        if (s != null) {
    	            return s.getPermissions().contains("publish_actions");
    	        } else
    	            return false;
    	    }
    	 
    	    public void requestPermissions() {
    	        Session s = Session.getActiveSession();
    	        if (s != null)
    	            s.requestNewPublishPermissions(new Session.NewPermissionsRequest(
    	                    this, PERMISSIONS));
    	    }
    	 
    	    @Override
    	    public void onResume() {
    	        super.onResume();
    	        uiHelper.onResume();
    	        buttonsEnabled(Session.getActiveSession().isOpened());
    	    }
    	 
    	    @Override
    	    public void onPause() {
    	        super.onPause();
    	        uiHelper.onPause();
    	    }
    	 
    	    @Override
    	    public void onDestroy() {
    	        super.onDestroy();
    	        uiHelper.onDestroy();
    	    }
    	 
    	    @Override
    	    public void onActivityResult(int requestCode, int resultCode, Intent data) {
    	        super.onActivityResult(requestCode, resultCode, data);
    	        uiHelper.onActivityResult(requestCode, resultCode, data);
    	    }
    	 
    	    @Override
    	    public void onSaveInstanceState(Bundle savedState) {
    	        super.onSaveInstanceState(savedState);
    	        uiHelper.onSaveInstanceState(savedState);
    	    }
    }

答案 1 :(得分:0)

可以预先填充数据,但实际上并不建议这样做,并且不存在对数据的支持。 Facebook已经明确地用他们的术语强调了它。

  

使用用户未输入的任何内容预填充用户消息参数,即使他们可以在共享之前编辑或删除该内容。这适用于帖子,评论,照片标题和相册标题。

虽然我没有看到Facebook个人打击它并不意味着应该这样做。如果它是一个灰色区域,你有理由打击Facebook的斗争(即删除商业页面,阻止API访问......)但是它很清楚没有这样做。