Не удается получить входящие запросы facebook

#android #facebook #facebook-graph-api #facebook-apps #facebook-requests

#Android #Facebook #facebook-graph-api #facebook-приложения #facebook-запросы

Вопрос:

Я пытаюсь реализовать отправку данных и принять эти данные в своем игровом приложении Facebook для Android.Я следую https://developers.facebook.com/docs/android/send-requests/#notifications учебное пособие для этого. Я могу отправить запрос, однако я не могу принять данные на стороне получателя.

Я intentUri каждый раз возвращаю null, поэтому я не могу получить requestIds.

мой код для получения данных на стороне получателя:

 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**
}
  

Метод onSessionStateChange() для вызова метода requestData

 private void onSessionStateChange(Session session, SessionState state,Exception exception) {
    if (state.isOpened() amp;amp; 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   "nn"   "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);
}
  

Примечание: я просто использую простое действие, я не использую фрагменты

Комментарии:

1. Поскольку Facebook SDK меняется так быстро, я могу только дать вам несколько указаний.

2. 1. Во-первых, вы получили какую-либо ошибку при отправке запроса?? Возможно, запрос не отправлен успешно. Вы должны тщательно проверить logcat на наличие подозрительных предупреждений / ошибок.

3. 2. Иногда настройки в вашей консоли приложений Facebook могут сделать ее видимой / невидимой на мобильном / рабочем столе. Вы можете проверить настройки консоли приложения fb. Эта часть настолько сложна и сложна для отладки, все, что вы можете сделать, это попробовать и ошибиться.

4. @NickJian Спасибо, запрос успешно отправлен без каких-либо ошибок или предупреждений, а также отображается в области уведомлений получателей на Facebook (web). Однако, когда я получаю доступ к данным с помощью MainActivity.this.getIntent().getData(); кода, он показывает null при печати в моем logcat, как я упоминал в вопросе.

Ответ №1:

Метод getIntent() возвращает намерение, с которого началось действие. Вы можете попробовать переопределить метод Activity

 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("request_ids", data) ?

Не уверен, что я полностью понял вашу проблему,

в любом случае, я желаю вам удачи.

Редактировать:

Возможно, вы захотите использовать Intent .EXTRA_STREAM вместо намерения.EXTRA_TEXT, в зависимости от способа хранения ваших данных

Комментарии:

1. Данные, которые я отправляю, передаются через собственные диалоги Facebook. Проверьте sendRequestDialog() мой вопрос, в котором я отправляю данные, используя params.putString(«данные»,»…..»); Так что здесь не может быть и речи о intent.putExtra

2. Да, вы правы, я виноват. Вы проверили настройки панели мониторинга приложений Facebook? Возможно, вы получаете нулевые данные, потому что у вас нет нужных разрешений. Разместили ли вы код для получения данных (intentUri = MainActivity.this.GetIntent().getData(); и т.д.) В методе MainActivity onCreate? Удивительно, что он не работает должным образом, учитывая, что он почти скопирован и вставлен из примеров документов Facebook SDK. Единственное, что приходит мне на ум прямо сейчас, это панель приложений. Дайте мне знать, как это происходит. P.S: вы пробовали intentUri =(Uri)bundle.get(намерение. EXTRA_STREAM)?