2012-02-28 3 views
1

누군가가이 이상한 문제로 나를 도울 수 있기를 바랍니다.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]; 
} 

답변

1

URL 문자열을 인코딩해야 할 수도 있습니다. 필드 (이름, 메시지 등)에 공백이나 다른 특수 문자가 있으면 iOS에서 URL 요청/연결이 실패합니다. 웹 브라우저는 일반적으로이 인코딩을 자동으로 수행하지만 iOS는 자동으로 인코딩하지 않습니다.

당신이 당신의 URL 문자열이 있으면, 시도 : 보조 노트로

urlString = [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding] 

, 오히려 여러보다 stringByAppendingString 전화를 [NSString stringWithFormat:@"", ...]을 사용할 수 있습니다. 예 :

urlString = [NSString stringWithFormat: 
      @"myApp/myphp.php?facebookID=%@&message=%@&sound=%@", 
      [friendsToSendTo objectAtIndex:i]], message, sound]; 
+0

확인해 보겠습니다. 내가 말했듯이, 출력 된 문자열은 내가 복사하여 브라우저에 붙여 넣으면 내가 찾고있는 메시지를 방아쇠를 당긴다 - 나는 그것을 올바르게 인코딩했다고 생각하게한다? 또한 앱이 시도하도록두면 코드의 절반을 트리거합니다. 두 번째 부분을 트리거하지 않는 것 같습니다. – TheBestBigAl

+0

브라우저에서 작업하는 것이 PHP 쪽이 좋다는 좋은 신호입니다. 내가 대답에 대해 말했듯이, 브라우저는 URL이나 쿼리 문자열에 공백과 같은 것들을 자동으로 인코딩 할 것입니다.하지만 iOS에'stringByAddingPercentEscapesUsingEncoding :'을 명시 적으로 사용하도록 지시해야합니다. – gregheo

+0

아 무슨 뜻인지 알 겠어. 내가 stringByAddingPercentEscapesUsingEncoding을 사용하여조차도 운이 없었습니다. 필자는 PHP가 훌륭하다는 것을 확신합니다. 나도 사용해 봤어 : NSString * messageString = [message stringByReplacingOccurrencesOfString : @ ""withString : @ ""]]; 문자열을 가능한 단순하게 유지해야합니다. 마지막 문자열 (내가 말한대로 stringWithFormat을 사용하는 것으로 변경됨)은 괜찮은 것처럼 보이지만 여전히 앱에서 FB 벽에 메시지를 게시하지 않습니다. 어딘가에서 권한 문제가 의심 될 수 있습니다. – TheBestBigAl