надеюсь, кто-то может помочь мне с этой странной проблемой.
У меня есть база данных, в которой хранятся идентификаторы Facebook всех зарегистрированных пользователей, и это прекрасно работает.
Пользователи могут отправлять сообщения своим друзьям в Facebook через PHP-скрипт, который активируется через приложение.
В моем сценарии есть раздел, в котором говорится, что если идентификатор одного из ваших друзей НЕ находится в базе данных (то есть они не являются зарегистрированными пользователями), то опубликуйте сообщение на их стене в Facebook, уведомив его о том, что кто-то пытался связаться с ними с помощью приложения.
Затем существует вторая база данных, в которой хранятся идентификаторы людей, которых мы уведомили через FB, чтобы мы не отправляли им несколько запросов.
Проблема в том, что сообщение никогда не появляется на их стене. Сообщение отправляется в скрипт 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 затем запускает процесс отправки сообщения получателю. Эта часть работает абсолютно нормально, сообщение получено без проблем.
Если их идентификатор не найден, он переходит к этому:
$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 & facebookID = 12345789 ... и т. Д.) В браузер и нажму Enter - сообщение ДОЛЖНО быть опубликовано на стене пользователя.
Так что теперь я полностью сбит с толку.
При запуске через браузер, сообщение принимается в приложении, если идентификатор Facebook зарегистрирован, и публикуется в 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];
}