我正在为小型企业主创建一个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应用程序,也是我在'现实生活'中完成的第一个项目。我试图弄清楚添加此功能是否值得他的业务。他表示,他希望此功能为用户创建一种简单的方式来共享内容。
答案 0 :(得分:1)
在我的应用中,我分享了各种知名人士对社交媒体的引用。我集成了Facebook SDK,使用户可以在墙上分享它。我没有遇到任何来自Facebook的打击行为。截至目前,应用程序已被5K人使用。
所以回答你的问题,
是的,有可能。不难实施
我不知道其他使用此功能的热门应用
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);
}
发布内容的代码位于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访问......)但是它很清楚没有这样做。