目前我正在开发一款Android应用,因为我正在使用Facebook SDK。它可以很好地将消息发布到墙上等,但是通过这个SDK,我无法向其他人发送应用请求。
任何人都可以帮助我吗?
这是我的代码段:
Bundle params = new Bundle();
params.putString("message", getString(R.string.request_message));
Utility.mFacebook.dialog(Hackbook.this, "apprequests", params, new AppRequestsListener());
和 AppRequestsListener :
public class AppRequestsListener extends BaseDialogListener {
@Override
public void onComplete(Bundle values) {
Toast toast = Toast.makeText(getApplicationContext(), "App request sent", Toast.LENGTH_SHORT);
toast.show();
}
@Override
public void onFacebookError(FacebookError error) {
Toast.makeText(getApplicationContext(), "Facebook Error: " + error.getMessage(), Toast.LENGTH_SHORT).show();
}
@Override
public void onCancel() {
Toast toast = Toast.makeText(getApplicationContext(), "App request cancelled", Toast.LENGTH_SHORT);
toast.show();
}
}
答案 0 :(得分:9)
从SDK 3.0版开始,您使用WebDialog。以下是如何使用提供的使用所有可用参数的构建器创建一个示例:
private void sendRequestDialog() {
Bundle params = new Bundle();
params.putString("title", "Send a Request");
params.putString("message", "Learn how to make your Android apps social");
params.putString("to", "12343543,32423534"); // comma seperated list of facebook IDs to preset the recipients. If left out, it will show a Friend Picker.
params.putString("data",
"{\"badge_of_awesomeness\":\"1\"," +
"\"social_karma\":\"5\"}"); // any additional data
WebDialog requestsDialog = (
new WebDialog.RequestsDialogBuilder(getActivity(), Session.getActiveSession(), params))
.setOnCompleteListener(new OnCompleteListener() {
@Override
public void onComplete(Bundle values, FacebookException error) {
// do something, e.g. show toast message
}
})
.build();
requestsDialog.show();
}
答案 1 :(得分:4)
使用Facebook Api 3.0
<强> 1。发送好友请求
Bundle params = new Bundle();
params.putString("message", "Learn how to make your Android apps social");
RequestsDialogBuilder builder = new RequestsDialogBuilder(MainActivity.this,
Session.getActiveSession(), params);
builder.setOnCompleteListener(new OnCompleteListener() {
@Override
public void onComplete(Bundle values, FacebookException error) {
if (error != null){
if (error instanceof FacebookOperationCanceledException){
Toast.makeText(MainActivity.this,"Request cancelled",Toast.LENGTH_SHORT).show();
}
else{
Toast.makeText(MainActivity.this,"Network Error",Toast.LENGTH_SHORT).show();
}
}
else{
final String requestId = values.getString("request");
if (requestId != null) {
Toast.makeText(MainActivity.this,"Request sent",Toast.LENGTH_SHORT).show();
}
else {
Toast.makeText(MainActivity.this,"Request cancelled",Toast.LENGTH_SHORT).show();
}
}
}
});
WebDialog requestDialog = builder.build();
requestDialog.show();
<强> 2。发送应用请求
Bundle parameters = new Bundle();
parameters.putString("message", "Send Request");
WebDialog.Builder builder = new Builder(MainActivity.this, Session.getActiveSession(),
"apprequests", parameters);
builder.setOnCompleteListener(new OnCompleteListener() {
@Override
public void onComplete(Bundle values, FacebookException error) {
if (error != null){
if (error instanceof FacebookOperationCanceledException){
Toast.makeText(MainActivity.this,"Request cancelled",Toast.LENGTH_SHORT).show();
}
else{
Toast.makeText(MainActivity.this,"Network Error",Toast.LENGTH_SHORT).show();
}
}
else{
final String requestId = values.getString("request");
if (requestId != null) {
Toast.makeText(MainActivity.this,"Request sent",Toast.LENGTH_SHORT).show();
}
else {
Toast.makeText(MainActivity.this,"Request cancelled",Toast.LENGTH_SHORT).show();
}
}
}
});
WebDialog webDialog = builder.build();
webDialog.show();
答案 2 :(得分:3)
android sdk有Dialogs你可以使用,当你打开一个对话框时,你可以指定你要打开的对话框。
您可以在Dialogs文档中查看可用对话框的列表。 其中一个对话框是Requests Dialog,您可以从android sdk中打开它,例如:
Facebook facebook = new Facebook("YOUR_APP_ID");
....
Bundle params = new Bundle();
params.putString("title", "invite friends");
facebook.dialog(this, "apprequests", params, new DialogListener() {
@Override
public void onComplete(Bundle values) {}
@Override
public void onFacebookError(FacebookError error) {}
@Override
public void onError(DialogError e) {}
@Override
public void onCancel() {}
});
您可以为此对话框添加更多参数,使用文档查看您需要的内容。
好的,看看这段代码:
Bundle paramsOut = new Bundle(), paramsIn = this.getIntent().getExtras();
paramsOut.putString("message", paramsIn.getString("message"));
this.facebook.dialog(this, "apprequests", paramsOut, new InviteListener(this));
我使用它并且它适用于我,正在发送应用程序请求并且用户收到它。 由于您的代码非常相似,因此可以安全地假设问题与不同之处有关,因此您应该将代码发布到不同的代码中。
那么,你的 AppRequestsListener 中有什么?说它只是显示一个弹出窗口并没有帮助我帮助你。 另外,这个* Hackbook是什么?“它是一种活动吗?
答案 3 :(得分:2)
此代码在Facebook Sdk 3.0中正常运行
private void sendRequestDialog(final String userId) {
Bundle params = new Bundle();
params.putString("title", "Invite Friend");
params.putString("message", "has invite has you to try out " +
"The perfect gamified experience for today's smart and social Cricket fan " +
"Download now on your ANDROID device!");
// comma seperated list of facebook IDs to preset the recipients. If left out, it will show a Friend Picker.
params.putString("to", userId); // your friend id
WebDialog requestsDialog = ( new WebDialog.RequestsDialogBuilder(MainActivity.this,
Session.getActiveSession(), params)).setOnCompleteListener(new OnCompleteListener() {
@Override
public void onComplete(Bundle values, FacebookException error) {
// Auto-generated method stub
if (error != null) {
if (error instanceof FacebookOperationCanceledException) {
Toast.makeText(MainActivity.this.getApplicationContext(),
"Request cancelled", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(MainActivity.this.getApplicationContext(),
"Network Error", Toast.LENGTH_SHORT).show();
}
} else {
final String requestId = values.getString("request");
if (requestId != null) {
Toast.makeText(MainActivity.this.getApplicationContext(),
"Request sent", Toast.LENGTH_SHORT).show();
Log.i("TAG", " onComplete req dia ");
} else {
Toast.makeText(MainActivity.this.getApplicationContext(),
"Request cancelled", Toast.LENGTH_SHORT).show();
}
}
}
}).build();
requestsDialog.show();
}
答案 4 :(得分:0)
我认为您错过了实际发送请求的onComplete中的代码。你在onComplete中所拥有的只是一个祝酒词,这就是你收到一条消息说你发送了请求的原因。您需要返回ID才能实际发送请求。
public void onComplete(Bundle values) {
final String returnId = values.getString("request");
if (returnId != null) {
Toast.makeText(getApplicationContext(),
"Request sent " + returnId,
Toast.LENGTH_SHORT).show();
}
}
您必须实际发送值onComplete。
答案 5 :(得分:0)
使用Facebook Api&lt; 3.0 - 发送应用程序请求
参考:https://stackoverflow.com/users/1237937/kirit
public void run() {
Bundle parameters = new Bundle();
parameters.putString("message", "Send Request");
WebDialog.Builder builder = new WebDialog.Builder(ConnectionSearchFacebook.this, facebookConnector.getFacebook().getSession(),
"apprequests", parameters);
builder.setOnCompleteListener(new WebDialog.OnCompleteListener() {
@Override
public void onComplete(Bundle values, FacebookException error) {
if (error != null){
if (error instanceof FacebookOperationCanceledException){
Toast.makeText(ConnectionSearchFacebook.this,"Request cancelled",Toast.LENGTH_SHORT).show();
}
else{
Toast.makeText(ConnectionSearchFacebook.this,"Network Error",Toast.LENGTH_SHORT).show();
}
}
else{
final String requestId = values.getString("request");
if (requestId != null) {
Toast.makeText(ConnectionSearchFacebook.this,"Request sent",Toast.LENGTH_SHORT).show();
}
else {
Toast.makeText(ConnectionSearchFacebook.this,"Request cancelled",Toast.LENGTH_SHORT).show();
}
}
}
});
WebDialog webDialog = builder.build();
webDialog.show();
}