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

Do any widely used Android apps have Facebook sharing with pre-populated text field?

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

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

另一方面,我了解到 Facebook [https://developers.facebook.com/docs/apps/review/prefill](一项政策)反对这样做。

我的问题是:
1)这真的可能吗? 如果是的话,与SharActionProvider相比实现难度如何?

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

3) 是否知道 Facebook 会打击此政策?他们对违反此政策的人采取了什么行动?

这是我创建的第一个 Android 应用程序,也是我在 'real life' 中完成的第一个项目。我想弄清楚添加此功能对他的业务是否值得。他表示他希望此功能能够为用户创建一种轻松共享内容的方式。

可以预填充数据,但确实不推荐这样做,并且不存在对它的支持。 Facebook 在他们的条款中明确强调了这一点。

Pre-fill the user message parameter with any content the user didn't enter themselves, even if they can edit or delete that content before sharing. This applies to posts, comments, photo captions, and photo album captions.

虽然我没有看到 Facebook 亲自打击它,但这并不意味着应该这样做。如果这是一个灰色地带,你就有理由与 Facebook 进行斗争(即删除商业页面,阻止 API 访问......)但是很明显不要这样做。

在我的应用程序中,我将各种名人的名言分享到社交媒体。我已经集成了 Facebook SDK,使用户能够在他们的墙上分享它。我没有面临来自 Facebook 的任何打击。截至目前,已有超过 5000 人使用该应用程序。

所以回答你的问题,

  1. 是的,这是可能的。不难实现

  2. 我不知道有其他流行的应用程序使用此功能

  3. FB 无打击或行动

这就是我在用户的 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);
 }

post内容的代码在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);
     }
}