希望有人可以帮助我解决这个奇怪的问题。如何从PHP脚本发布到朋友墙?
我有存储谁已经注册的所有用户的Facebook的ID数据库,这工作得很好。
用户可以发送邮件通过PHP脚本他们的Facebook朋友这是通过应用程序激活。
在我的脚本中,我有一个部分说如果你的一个朋友的ID不在数据库中(即他们不是注册用户),然后发送消息到他们的Facebook墙上,通知他们有人有试图用应用程序联系他们。
有那么存储,我们已通过FB通知人的ID,所以我们不给他们多次请求第二个数据库。
的问题是,该消息不会永远出现在他们的墙上。该消息被发送到PHP脚本像这样的字符串:
NSString *urlString = [@"myApp/myphp.php?"stringByAppendingString:@"task=send"];
urlString = [urlString stringByAppendingString:@"&facebookID="];
urlString = [urlString stringByAppendingString:[friendsToSendTo objectAtIndex:i]];
urlString = [urlString stringByAppendingString:@"&message="];
urlString = [urlString stringByAppendingString:message];
urlString = [urlString stringByAppendingString:@"&sound="];
urlString = [urlString stringByAppendingString:chosenSoundToSend];
urlString = [urlString stringByAppendingString:@"&sendersName="];
urlString = [urlString stringByAppendingString:myName];
在PHP脚本,任务=发送部分则开始将消息发送到收件人的过程。这部分工作非常好,信息没有问题。
如果没有找到自己的ID它然后移动到这一点:
$this->_postToFacebook($sendersName, $facebookID);
的_postToFacebook功能如下:
private function _postToFacebook($sender, $receiver)
{
require_once "facebook.php";
//registered with developers.facebook for this particular app
$app_id = "****************";
$app_secret = "*****************";
$facebook = new Facebook(array(
'appId' => $app_id,
'secret' => $app_secret,
'cookie' => true
));
// Get the url to redirect for login to facebook
// and request permission to write on the user's wall.
$login_url = $facebook->getLoginUrl(
array('scope' => 'publish_stream')
);
// If not authenticated, redirect to the facebook login dialog.
// The $login_url will take care of redirecting back to us
// after successful login.
if (! $facebook->getUser()) {
echo <<< EOT
<script type="text/javascript">
top.location.href = "$login_url";
</script>;
EOT;
exit;
}
// Do the wall post.
$facebook->api("/$receiver/feed", "post", array(
message => "$sender sent you a message",
picture => "image.jpg",
link => "mywebsite.com",
name => "Visit iTunes to download and reply",
caption => "mycaption"
));
}
这似乎是失败的部分,或者至少是我最初的假设。 不过,如果我手动输入生成的URL(....任务=发送& facebookID = 12345789 ...等)到浏览器并回车 - 消息DOES能张贴到墙上的用户。
所以现在我完全糊涂了。 当通过浏览器触发时,如果Facebook ID已注册,则在应用程序中收到消息,如果未注册,则将消息发布到FB。 从应用程序本身开始,当收件人注册时收到消息 - 但是发布到FB从不起作用。 大概我错过了某种地方的权限?
在此先感谢任何人谁可以帮助:-)
编辑:如果它是一个权限的事情,我要补充一点,我已经设置这些权限:
if (![facebook isSessionValid]){
NSArray *permissions = [[NSArray alloc] initWithObjects:
@"user_relationships", @"friends_relationships",
@"user_relationship_details", @"friends_relationship_details",
@"read_friendlists",@"offline_access", @"publish_stream",
nil];
[facebook authorize:permissions];
[permissions release];
}
而在Facebook的我必须将这些更改为否,否则它根本不连接,也许这也会导致问题?
- (void)authorize:(NSArray *)permissions {
self.permissions = permissions;
[self authorizeWithFBAppAuth:NO safariAuth:NO];
}
好的我会仔细看看。正如我所说,如果我复制并粘贴到浏览器中,输出的字符串确实会触发我正在查找的消息 - 这让我认为它已正确编码了它?如果我让应用程序尝试它,它也会触发一半的代码,但它似乎不会触发第二部分。 – TheBestBigAl 2012-02-29 10:10:34
在浏览器中工作是一个很好的迹象,PHP方面很好。正如我在答案中所说的那样,浏览器会自动在URL或查询字符串中对空格进行编码,而您必须告诉iOS使用'stringByAddingPercentEscapesUsingEncoding:'显式地执行它。 – gregheo 2012-02-29 14:48:41
啊我明白你的意思了。 Hoever我仍然没有运气,甚至使用stringByAddingPercentEscapesUsingEncoding。正如你所说,我相当肯定PHP是好的。我甚至尝试过使用:NSString * messageString = [message stringByReplacingOccurrencesOfString:@“”withString:@“”];让字符串尽可能简单。最后一个字符串(我也改为使用stringWithFormat,就像你说过的)似乎没问题,但仍然不会从应用程序发布消息到FB墙。我仍然怀疑某处可能存在权限问题。 – TheBestBigAl 2012-03-01 14:53:18