누군가가이 이상한 문제로 나를 도울 수 있기를 바랍니다.PHP 스크립트에서 친구 벽에 게시하는 방법?
나는 등록한 모든 사용자의 Facebook ID를 저장하는 데이터베이스를 가지고 있으며, 이것은 정상적으로 작동합니다.
사용자는 앱을 통해 활성화 된 PHP 스크립트를 통해 Facebook 친구에게 메시지를 보낼 수 있습니다.
제 스크립트에는 친구들 중 하나의 ID가 데이터베이스에 없다면 (즉, 등록 된 사용자가 아닌 경우) 누군가가 가지고 있다고 알리는 메시지를 Facebook 벽에 게시합니다 앱을 사용하여 연락을 시도했습니다.
FB를 통해 신고 한 사람의 ID를 저장하는 두 번째 데이터베이스가 있으므로 여러 요청을 보내지 않습니다.
문제는 메시지가 벽에 나타나지 않는다는 것입니다. 이 메시지는이 같은 문자열로 PHP 스크립트에 전송됩니다
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];
, 작업 = 일부를 전송 한 후받는 사람에게 메시지를 보내는 프로세스를 시작합니다. 이 부분은 절대적으로 잘 작동하며 메시지는 전혀 문제없이 수신됩니다.
자신의 ID가 발견되지 않는 경우는 다음이로 이동 :
_postToFacebook 기능은 다음과 같습니다$this->_postToFacebook($sendersName, $facebookID);
:
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 = & 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];
}
그리고 페이스 북에서 : 경우에 그것은 내가 이러한 권한을 설정 한 것을 추가해야하는 권한 일 class 나는 이것을 NO로 바꿔야했다. 그렇지 않으면 전혀 연결되지 않았을 것이다. 아마도 이것은 또한 문제를 야기 할까?
- (void)authorize:(NSArray *)permissions {
self.permissions = permissions;
[self authorizeWithFBAppAuth:NO safariAuth:NO];
}
확인해 보겠습니다. 내가 말했듯이, 출력 된 문자열은 내가 복사하여 브라우저에 붙여 넣으면 내가 찾고있는 메시지를 방아쇠를 당긴다 - 나는 그것을 올바르게 인코딩했다고 생각하게한다? 또한 앱이 시도하도록두면 코드의 절반을 트리거합니다. 두 번째 부분을 트리거하지 않는 것 같습니다. – TheBestBigAl
브라우저에서 작업하는 것이 PHP 쪽이 좋다는 좋은 신호입니다. 내가 대답에 대해 말했듯이, 브라우저는 URL이나 쿼리 문자열에 공백과 같은 것들을 자동으로 인코딩 할 것입니다.하지만 iOS에'stringByAddingPercentEscapesUsingEncoding :'을 명시 적으로 사용하도록 지시해야합니다. – gregheo
아 무슨 뜻인지 알 겠어. 내가 stringByAddingPercentEscapesUsingEncoding을 사용하여조차도 운이 없었습니다. 필자는 PHP가 훌륭하다는 것을 확신합니다. 나도 사용해 봤어 : NSString * messageString = [message stringByReplacingOccurrencesOfString : @ ""withString : @ ""]]; 문자열을 가능한 단순하게 유지해야합니다. 마지막 문자열 (내가 말한대로 stringWithFormat을 사용하는 것으로 변경됨)은 괜찮은 것처럼 보이지만 여전히 앱에서 FB 벽에 메시지를 게시하지 않습니다. 어딘가에서 권한 문제가 의심 될 수 있습니다. – TheBestBigAl