Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 无法获取facebook传入的请求_Android_Facebook_Facebook Graph Api_Facebook Apps_Facebook Requests - Fatal编程技术网

Android 无法获取facebook传入的请求

Android 无法获取facebook传入的请求,android,facebook,facebook-graph-api,facebook-apps,facebook-requests,Android,Facebook,Facebook Graph Api,Facebook Apps,Facebook Requests,我正在尝试在我的Facebook android游戏应用程序中实现发送数据并接受这些数据。我将遵循相关教程。我能够发送请求,但是我无法接受接收方的数据 我的intentUri每次都返回null,因此我无法获取请求ID 我在接收方获取数据的代码: intentUri = MainActivity.this.getIntent().getData(); if (intentUri != null) { String requestIdParam = intentUri.getQueryPar

我正在尝试在我的Facebook android游戏应用程序中实现发送数据并接受这些数据。我将遵循相关教程。我能够发送请求,但是我无法接受接收方的数据

我的
intentUri
每次都返回null,因此我无法获取请求ID

我在接收方获取数据的代码:

intentUri = MainActivity.this.getIntent().getData();
if (intentUri != null) {
    String requestIdParam = intentUri.getQueryParameter("request_ids");
    if (requestIdParam != null) {
        String array[] = requestIdParam.split(",");
        requestId = array[0];
        Log.i("Request id: ", "Request id: " + requestId);

    }else{
        Log.i("Request id: ", "null" );

    }
} else {
    Log.i("intentUri", "null");     //**Always printing this part**
}
用于调用requestData方法的onSessionStateChange()方法

private void onSessionStateChange(Session session, SessionState state,Exception exception) {
    if (state.isOpened() && requestId != null) {
        getRequestData(requestId);
        requestId = null;
    }
}
我正在使用以下方法发送请求:

private void sendRequestDialog() {
    Bundle params = new Bundle();
    params.putString("message",
            "Learn how to make your Android apps social");
    params.putString("data", "{\"badge_of_awesomeness\":\"1\","
            + "\"social_karma\":\"5\"}");
    WebDialog requestsDialog = (new WebDialog.RequestsDialogBuilder(
            MainActivity.this, Session.getActiveSession(), params))
            .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();
                        }
                    }
                }
            }).build();
    requestsDialog.show();
}
接受请求的代码如下:

private void getRequestData(final String inRequestId) {
    // Create a new request for an HTTP GET with the
    // request ID as the Graph path.
    Request request = new Request(Session.getActiveSession(), inRequestId,
            null, HttpMethod.GET, new Request.Callback() {
                @Override
                public void onCompleted(Response response) {
                    // Process the returned response
                    GraphObject graphObject = response.getGraphObject();
                    FacebookRequestError error = response.getError();
                    // Default message
                    String message = "Incoming request";
                    if (graphObject != null) {
                        // Check if there is extra data
                        if (graphObject.getProperty("data") != null) {
                            try {
                                // Get the data, parse info to get the
                                // key/value info
                                JSONObject dataObject = new JSONObject(
                                        (String) graphObject
                                                .getProperty("data"));
                                // Get the value for the key -
                                // badge_of_awesomeness
                                String badge = dataObject
                                        .getString("badge_of_awesomeness");
                                // Get the value for the key - social_karma
                                String karma = dataObject
                                        .getString("social_karma");
                                // Get the sender's name
                                JSONObject fromObject = (JSONObject) graphObject
                                        .getProperty("from");
                                String sender = fromObject
                                        .getString("name");
                                String title = sender + " sent you a gift";
                                // Create the text for the alert based on
                                // the sender
                                // and the data
                                message = title + "\n\n" + "Badge: "
                                        + badge + " Karma: " + karma;
                            } catch (JSONException e) {
                                message = "Error getting request info";
                            }
                        } else if (error != null) {
                            message = "Error getting request info";
                        }
                    }
                    Toast.makeText(MainActivity.this, message,
                            Toast.LENGTH_LONG).show();
                    deleteRequest(inRequestId);
                }
            });
    // Execute the request asynchronously.
    Request.executeBatchAsync(request);
}
注意:我只是使用简单活动,没有使用片段。方法
getIntent()
返回启动活动的意图。您可以尝试重写活动方法

protected void onNewIntent(Intent intent)
打电话

setIntent(Intent-Intent)

从那里开始

您也可以尝试使用以下方式请求数据:

Intent intent = MainActivity.this.getIntent();
Bundle bundle = intent.getExtras();
intentUri = (Uri)bundle.get(Intent.EXTRA_TEXT);
除此之外,您在哪里以及如何调用
intent.putExtra(“请求id”,data)

不确定我是否完全理解你的问题

不管怎样, 祝你好运

编辑:


您可能希望使用Intent.EXTRA_流而不是Intent.EXTRA_文本,这取决于您存储数据的方式

由于Facebook SDK变化如此之快,我只能给您一些指导。1.首先,您发送请求时是否收到任何错误??可能请求未成功发送。您必须仔细检查logcat是否存在可疑警告/错误。2.有时,facebook应用程序控制台中的设置可能会使其在手机/桌面上可见/不可见。您可以检查fb应用程序控制台设置。这一部分非常复杂,很难调试,您所能做的就是反复尝试。@NickJian谢谢,请求已成功发送,没有任何错误或警告,它也显示在Facebook(web)上的接收者通知区域。但是,当我通过
MainActivity.this.getIntent().getData()访问数据时sendRequestDialog()
,我正在使用params.putString(“data”和“…”)发送数据;所以这里没有意图的问题。是的,你是对的,我的错。您是否检查了Facebook应用程序仪表板设置?您可能因为没有正确的权限而收到空数据。您是否已将获取数据的代码(intentUri=MainActivity.this.getIntent().getData();等)放在MainActivity onCreate方法中?令人惊讶的是,它不能正常工作,因为它几乎是从Facebook SDK文档示例中复制和粘贴的。我现在唯一想到的就是应用程序面板。让我知道进展如何。附言:你试过intentUri=(Uri)bundle.get(Intent.EXTRA_STREAM)吗?