4

我正在尝试使用 Graph API Explorer 从我的应用程序发送 Facebook 通知。所以我选择了我的应用程序 POST,并在/

11093774316/notifications?access_token=430xxxxxx156|HU0ygMtxxxxxxxxxxxxikVKg&template=Hello&href=index.php

访问字符串是我在“访问令牌调试器”上得到的,我检查它是否正常。

但是,我收到此错误消息:

{
  "error": {
    "message": "(#15) This method must be called with an app access_token.", 
    "type": "OAuthException", 
    "code": 15
  }
}

我会说它在一个月前工作......有什么想法吗?

谢谢

4

6 回答 6

6

尝试使用此处的访问令牌:

https://developers.facebook.com/tools/access_token/

我有同样的问题,我已经解决了。

于 2014-09-06T14:00:40.543 回答
4
  • 尽快更改您的应用程序机密,您不应在这些问题中包含私人信息
  • 然后,检查您的应用程序的高级设置并将应用程序类型设置为“Web”,而不是“native/desktop” - 如果它设置为native/desktop,则应用程序机密不受信任并且需要应用程序访问令牌的调用将失败。
于 2012-10-07T17:38:44.520 回答
0

我也在尝试使用图形 api 发布通知。我首先请求正确返回的应用程序 access_token。然后我将它用作通知请求的参数,就像应该做的那样。但是,我仍然收到相同的错误消息“必须使用应用程序 access_token 调用此方法”......并且是的,该应用程序配置为 Web 应用程序。

前五个小时很有趣,但它变得有点烦人......

任何其他的想法,世界?请?

编辑我整晚都在与这个问题作斗争,第二天早上,我最终决定放弃它。这个 API 肯定有我不理解的问题,而且我无法在任何地方找到任何解决方案。

关于我所做的一些细节,以防有人提出想法:

这是一个 iOS 应用程序,使用 Facebook iOS SDK。登录、授权、获取朋友资料、在我的墙上发布消息:一切正常。

然后,为了发送通知,我首先发送请求以检索应用访问令牌。

NSDictionary* parameters = @{@"client_id": [THE APP FACEBOOK ID], @"client_secret" : [THE APP FACEBOOK SECRET], @"grant_type" : @"client_credentials"};

NSURL* feedURL = [NSURL URLWithString:@"https://graph.facebook.com/oauth/access_token"];

SLRequest *feedRequest = [SLRequest requestForServiceType:SLServiceTypeFacebook requestMethod:SLRequestMethodGET URL:feedURL parameters:parameters];
feedRequest.account = self.account;
[feedRequest performRequestWithHandler ... ]

请求回答:

NSString* tokenString = [[NSString alloc]  initWithBytes:[responseData bytes] length:[responseData length] encoding: NSUTF8StringEncoding];
NSArray* chunks = [tokenString componentsSeparatedByString: @"="];
NSString* appAccessToken = [chunks objectAtIndex:1];

NSLog(@"appAccessToken '%@'", appAccessToken);

这似乎按预期工作。我得到:

appAccessToken '1309[HIDDEN]|-eta-nuWz[HIDDEN]'

现在,我尝试发布通知

NSDictionary* parameters = @{@"href": [myHref absoluteString], @"access_token" : appAccessToken, @"template" : myMessage};
NSURL* feedURL = [NSURL URLWithString:[NSString stringWithFormat:@"https://graph.facebook.com/%@/notifications", theRecipientFacebookId];
SLRequest* feedRequest = [SLRequest requestForServiceType:SLServiceTypeFacebook requestMethod:SLRequestMethodPOST URL:feedURL parameters:parameters];
    feedRequest.account = self.account;
    [feedRequest performRequestWithHandler: ... ]

不幸的是,我不断得到这个:

error =     {
    code = 15;
    message = "(#15) This method must be called with an app access_token.";
    type = OAuthException;
};

这真的让我发疯了......

于 2013-04-28T03:07:01.770 回答
0

所以,因为我使用 Graph Api Explorer 获得了成功,所以我有了绕过 SLRequest 对象的想法,然后去处理通常的发布请求(使用 AFNetworking)。

NSURL* url = [NSURL URLWithString:@"https://graph.facebook.com"];
AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:url];

NSDictionary *params = [NSDictionary dictionaryWithObjectsAndKeys: appToken, @"access_token", @"index.php", @"href", @"hello", @"template", nil];

[httpClient postPath:[NSString stringWithFormat:@"/%@/notifications", theRecipientFacebookId] parameters:params success:^(AFHTTPRequestOperation *operation, id responseObject) {
            NSString *responseStr = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];
            NSLog(@"Request Successful, response '%@'", responseStr);
        } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
            NSLog(@"[HTTPClient Error]: %@", error.localizedDescription);
        }];

我得到了成功:真的!因此,如果我不得不猜测,我建议在使用 SLRequest 时会覆盖 access_token 参数(应用程序访问令牌),并且会被另一个“access_token”(用户访问令牌)覆盖。如果这是实际的解释,那当然是有道理的。但是为什么这些令牌应该具有相同的名称呢?

编辑:我确实看到了通知,现在,它可以工作了。所以问题肯定来自使用 SLRequest,我相信它会覆盖 access_token 参数。

附加信息:您无法向尚未安装应用程序的用户发送通知。为了“邀请朋友”,目前看来唯一的解决方案是使用 facebook SDK 中的 Dialog 功能。

于 2013-04-28T11:50:14.733 回答
0

尝试更改图形资源管理器顶部字段中的访问令牌,不要将其添加到 URL。

Access Token: xxxxxx|YYYYYY

POST: /11093774316/notifications?template=Hello&href=index.php
于 2013-12-20T00:05:53.680 回答
0

转到您的设置 => Basic => App Secret 并将该密钥用作密钥然后我们

于 2018-03-04T11:11:50.720 回答