GÖZLEMLEYİN https://developers.facebook.com/docs/chat/
Bu belgenin kapsadığı hizmet ve API, Platform API v2.0 sürümüyle birlikte kullanımdan kaldırılmıştır. 1.0 sürümü kullanımdan kaldırıldığında, chat.facebook.com artık kullanılamayacak.
Önemli! Bunu okuyun ve muhtemelen bu soruyla ilgili her şeyden tamamen farklı bir şey yapmak istersiniz.
Facebook Chat API'ye bağlanan WebForms C # ile bir sohbet oluşturuyorum.
Bu SO sorusuna (ve tüm bağlantılara) da baktım . Facebook'un auth_token
şimdi gerektirmesi nedeniyle bazı bölümler artık alakalı değil .
Bunu çoğaltmak için, bir Facebook web uygulaması appId
kurmalı , ve xmpp_login izin setine sahip bir kullanıcı hesabı kullanmalısınız . Ardından Chat.aspx
arkasında bir kod oluşturun ve bu kodu uygun şekilde yapıştırın. Ve etkileşime girmek için sabit kodlanmış kullanıcıları değiştirin.
Sohbet mesajı gönderme amacımla başarılı olamadığımı düşündüğüm iki (belki üç) sorun var.
// finishes auth process
Dokümantasyonda belirtilen işlem dokümantasyon açıklamasına uymuyor (Facebook'tan SSL / TLS tabanlı başarı mesajımı aldıktan sonra herhangi bir yanıt alamıyorum.)- 'Sohbet mesajı gönder' bölümünün nasıl ayarlanacağı hakkında hiçbir fikrim yok ve Facebook'tan herhangi bir mesaj almadığım için neyin yanlış olabileceğini söylemek zor.
İşte kodumun tamamı PasteBin'de .
Ayrıca xmpp_login izinleri eklemek için bazı yardımcılarım var ve bunun gibi .. netlik için kaldırıldı.
Global değişkenler:
public partial class Chat : Page
{
public TcpClient client = new TcpClient();
NetworkStream stream;
private SslStream ssl;
private string AppId { get; set; }
public string AppSecret { get; set; }
public string AppUrl { get; set; }
public string UserId { get; set; }
public string AccessToken { get; set; }
private string _error = string.Empty;//global error string for watch debugging in VS.
public const string FbServer = "chat.facebook.com";
private const string STREAM_XML = "<stream:stream xmlns:stream=\"http://etherx.jabber.org/streams\" version=\"1.0\" xmlns=\"jabber:client\" to=\"chat.facebook.com\" xml:lang=\"en\" xmlns:xml=\"http://www.w3.org/XML/1998/namespace\">";
private const string AUTH_XML = "<auth xmlns='urn:ietf:params:xml:ns:xmpp-sasl' mechanism='X-FACEBOOK-PLATFORM'></auth>";
private const string CLOSE_XML = "</stream:stream>";
private const string RESOURCE_XML = "<iq type=\"set\" id=\"3\"><bind xmlns=\"urn:ietf:params:xml:ns:xmpp-bind\"><resource>fb_xmpp_script</resource></bind></iq>";
private const string SESSION_XML = "<iq type=\"set\" id=\"4\" to=\"chat.facebook.com\"><session xmlns=\"urn:ietf:params:xml:ns:xmpp-session\"/></iq>";
private const string START_TLS = "<starttls xmlns=\"urn:ietf:params:xml:ns:xmpp-tls\"/>";
Daha sonra Page_Load
gerekli tüm adımlarda gerçekleştirilir (veya yapılması gerekir). Kayda değer SendMessage("test");
. Bir sohbet mesajı göndermede başarılı olup olmayacağını görmek için oraya koymaya çalıştım ... SetUserNameAndAuthToken
kimlik doğrulama jetonumu ve kullanıcı adımı genel değişkenlere ayarlıyor. AuthToken çalışır.
protected void Page_Load(object sender, EventArgs e)
{
this.AppId = "000000082000090";//TODO get from appsettings.
//AddAdditionalPermissions("xmpp_login");//TODO handle xmpp_login persmission
this.AppSecret = "d370c1bfec9be6d9accbdf0117f2c495"; //TODO Get appsecret from appsetting.
this.AppUrl = "https://fbd.anteckna.nu";
SetUserNameAndAuthToken();
Connect(FbServer);
// initiates auth process (using X-FACEBOOK_PLATFORM)
InitiateAuthProcess(STREAM_XML);
// starting tls - MANDATORY TO USE OAUTH TOKEN!!!!
StartTlsConnection(START_TLS);
// gets decoded challenge from server
var decoded = GetDecodedChallenge(AUTH_XML);
// creates the response and signature
string response = CreateResponse(decoded);
//send response to server
SendResponseToServer(response);
SendMessage("test");
// finishes auth process
FinishAuthProcess();
// we made it!
string streamresponseEnd = SendWihSsl(CLOSE_XML);
}
Bu yüzden bir yanıt alıyorum ve ardından yanıtı sunucuya gönderiyorum:
private void SendResponseToServer(string response)
{
string xml = String.Format("<response xmlns=\"urn:ietf:params:xml:ns:xmpp-sasl\">{0}</response>", response);
string response2 = SendWihSsl2(xml);
if (!response2.ToLower().Contains("success"))
_error = response2;
}
Bu 1 dakika 40 saniye sürer ... ve yanıt:
<success xmlns='urn:ietf:params:xml:ns:xmpp-sasl'/>
Sonunda FinishAuthPorcess () yapıyorum
private void FinishAuthProcess()
{
string streamresponse = SendWithSsl(STREAM_XML);
if (!streamresponse.Contains("STREAM:STREAM"))
_error = streamresponse;
string streamresponse2 = SendWihSsl(RESOURCE_XML);
if (!streamresponse2.Contains("JID"))
_error = streamresponse2;
string streamresponse3 = SendWihSsl(SESSION_XML);
if (!streamresponse3.Contains("SESSION"))
_error = streamresponse2;
}
Tüm yanıtlar ""
. Read
Yönteme bakıldığında SendWithSsl
: 0 bayt. Bir mesaj göndermeye çalışmak da bana 0 bayt Facebook'tan veri oku veriyor. Neden olduğuna dair hiçbir fikrim yok?