我有一个数据库存储已注册的所有用户的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脚本中,task = send部分然后开始向收件人发送邮件的过程。这部分工作得非常好,收到的信息完全没有问题。
如果找不到他们的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(.... task = send&amp; facebookID = 12345789 ...等)输入浏览器并按Enter键,则会将消息发布到用户墙。
所以现在我完全糊涂了。 当通过浏览器触发时,如果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课程中,我必须将这些更改为NO,否则它根本不会连接,也许这也会导致问题?
- (void)authorize:(NSArray *)permissions {
self.permissions = permissions;
[self authorizeWithFBAppAuth:NO safariAuth:NO];
}
答案 0 :(得分:1)
您可能需要对URL字符串进行编码。如果字段(如名称,消息等)包含空格或其他特殊字符,则来自iOS的URL请求/连接将失败。 Web浏览器通常会自动为您执行此编码,但iOS不会。
获得网址后,请尝试:
urlString = [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]
作为旁注,您可能希望使用[NSString stringWithFormat:@"", ...]
而不是多次stringByAppendingString
来电。类似的东西:
urlString = [NSString stringWithFormat:
@"myApp/myphp.php?facebookID=%@&message=%@&sound=%@",
[friendsToSendTo objectAtIndex:i]], message, sound];