Как удалить запросы приложений с помощью Javascript SDK

У меня есть следующий код Javascript:

        function RemoveRequest( requestToRemove )
        {           
            FB.api( requestToRemove, 'delete', function(response) {
                console.log(response);
              });
        }

Кажется, это стандартный подход, который люди используют. К сожалению, я получаю сообщение об ошибке. В объекте ответа, который я получаю от этого, указано следующее: «Должен быть указан получатель запроса приложения: получатель этого запроса приложения должен быть указан с помощью подписанного пользователем токена доступа или полностью указанного идентификатора запроса приложения».

Итак, вместо этого я пытаюсь использовать requestid_facebookid... безуспешно. Я пытаюсь передать свой токен доступа через

FB.api(requestToRemove, 'delete', {access_token:accessToken}, function(response) {
                console.log(response);
              });

Оба дают мне ту же ошибку.

Мы будем очень благодарны за любые советы.

Изменить: просто для ясности, authToken, который я получаю, получен из response.authResponse.accessToken из getLoginStatus.


person Than Newell    schedule 21.10.2011    source источник
comment
requestid_facebookid должен решить проблему. Просто убедитесь, что часть facebookid на самом деле является идентификатором получателя, а не отправителя.   -  person ifaour    schedule 22.10.2011
comment
Как я уже упоминал выше, я попробовал это, и я все еще получаю ту же ошибку. Случайно я включил Requests 2.0 Efficient и попробовал еще раз, но все равно получаю ту же ошибку с requestid_facebookid.   -  person Than Newell    schedule 22.10.2011
comment
Еще один лакомый кусочек информации, если я попытаюсь игнорировать все через страницу предупреждений об игре в Facebook, я получаю точно такую ​​​​же ошибку.   -  person Than Newell    schedule 22.10.2011


Ответы (3)


Я до сих пор не знаю, как удалить эти запросы. Тем не менее, я придумал обходной путь с помощью графического API.

Новый код выглядит следующим образом:

Отправка запроса приложения

var params = {};
params['message'] = 'My message!';
params['title'] = 'My title!';
params['to'] = inID;
params['access_token'] = accessToken;
FB.api('/me/apprequests', 'POST', params, 
    function(response){
        if( response )
        {
            console.log( response );
        }
    });

И удалить его

function RemoveRequest( requestToRemoveID, facebookUserID )
{
        requestToRemoveID = '/'+requestToRemoveID + '_' + facebookUserID;
    console.log( requestToRemoveID );

    FB.api( requestToRemoveID, 'DELETE', function(response) {
        console.log(response);
        });
}

Похоже, это изменило тип запроса с запроса пользовательского приложения на запрос приложения. Логотип изменился с моего изображения профиля на значок приложения. Мне удалось удалить эти запросы как из графического API, так и через веб-страницу facebook. Я все еще хотел бы знать, как удалить запросы пользовательских приложений, если у кого-то есть идеи.

person Than Newell    schedule 23.10.2011

Я потерял 6 часов поиска в Интернете, в конце концов я разобрался сам.

послать запрос:

private function invite():void
{
    var dat:Object = new Object();
    dat.message = "MyMessage";
    dat.title   = "MyTitle;
    dat.filters = ['app_non_users'];

    Facebook.ui('apprequests', dat, onUICallback);
}

2 возможных способа обратного вызова:

Вариант 1 с Facebook.api

private function onUICallback(result:Object):void{  

    if(result == null){
        trace('User closed the pop up window without inviting any friends');
    }else{

        if(result.hasOwnProperty("request")){

            var data:Object = new Object();
            data.method = 'delete';
            var userid:String = "here goes the uid of the user that sent the request"
            var fullrequestID:String = result.request + '_' + userid;

            Facebook.api(fullrequestID, onRequestDelete, data, "POST")

        }
}

вариант 2: с Facebook.deleteObject

private function onUICallback(result:Object):void{
    if(result == null){
        trace('User closed the pop up window without inviting any friends');
    }else{
        if(result.hasOwnProperty("request")){
            var userid:String = "here goes the uid of the user that sent the request"
            var fullrequestID:String = result.request + '_' + userid;           

            Facebook.deleteObject(fullrequestID, onRequestDelete);
        }
    }
}

функция обратного вызова для удаления:

private function onRequestDelete(result:Object, fail:Object):void{
    if(result == null){
        trace('Delete Request faild');
    }else{
        trace('Delete Request succes');
    }
} 
person Luca    schedule 08.02.2012

Если вы хотите удалить все ожидающие запросы приложений Facebook для текущего вошедшего в систему пользователя с помощью Javascript SDK, вы можете сделать следующее:

        FB.getLoginStatus(function(response) {
            console.log(response);
            if (response.status === 'connected') {

                var uid = response.authResponse.userID;
                var accessToken = response.authResponse.accessToken;

                FB.api('/me/apprequests', function(response){
                    console.log( response );

                    for (var i = 0; i < response.data.length; i++){

                        FB.api(response.data[i].id, 'delete', function(response) {
                            console.log(response);
                        });
                    }
                });
            } 
        });
person Luigi C.    schedule 28.05.2015