如何通过Facebook Android SDK向朋友发送应用请求

时间:2012-04-14 11:19:09

标签: android facebook facebook-graph-api

目前我正在开发一款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();
    }
}

6 个答案:

答案 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();
}

参考:Facebook SDK 3.0 for Android: Send Requests

答案 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();

    }