希望有人可以幫助我解決這個奇怪的問題。如何從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