OBSERVE https://developers.facebook.com/docs/chat/
प्लेटफ़ॉर्म एपीआई v2.0 की रिलीज़ के साथ सेवा और एपीआई इस दस्तावेज़ को कवर किया गया है। एक बार जब 1.0 संस्करण को हटा दिया जाता है, तो chat.facebook.com अब उपलब्ध नहीं होगा।
महत्वपूर्ण! इसे पढ़ें और आप शायद इस सवाल के साथ जो कुछ भी करना चाहते हैं उससे कुछ अलग करना चाहते हैं।
मैं फेसबुक चैट एपीआई से जुड़कर WebForms C # के साथ एक चैट बना रहा हूं।
मैंने इस SO प्रश्न (और सभी लिंक) को भी देखा है । कुछ हिस्से अब प्रासंगिक नहीं हैं क्योंकि फेसबुक को auth_token
अब इसकी आवश्यकता है।
इसे दोहराने के लिए, आपको फेसबुक वेब ऐप सेट करना चाहिए, appId
और xmpp_login अनुमति सेट के साथ उपयोगकर्ता खाते का उपयोग करना चाहिए । फिर Chat.aspx
पीछे एक कोड बनाएं और उसके अनुसार इस कोड को पेस्ट करें। और इंटर करने के लिए हार्ड-कोडेड उपयोगकर्ताओं को बदलें।
मेरे पास दो (शायद तीन) मुद्दे हैं जो मेरा मानना है कि मुझे चैट संदेश भेजने के अपने लक्ष्य के साथ सफल होने से रोकते हैं।
// finishes auth process
दस्तावेज़ीकरण में उल्लिखित प्रक्रिया प्रलेखन विवरण से मेल नहीं खाती है (मुझे फेसबुक से मेरा एसएसएल / टीएलएस आधारित सफलता संदेश प्राप्त होने के बाद कोई प्रतिक्रिया नहीं मिल रही है।)- मुझे नहीं पता कि 'चैट संदेश कैसे भेजें'-भाग सेट किया जाना चाहिए, और चूंकि मुझे फेसबुक से कोई संदेश प्राप्त नहीं होता है, इसलिए यह बताना मुश्किल है कि क्या गलत हो सकता है।
यहाँ पेस्टीबिन पर अपनी संपूर्णता में मेरा कोड है ।
मेरे पास xmpp_login अनुमतियाँ जोड़ने के लिए कुछ सहायक भी हैं और ऐसे .. स्पष्टता के लिए हटा दिए गए हैं।
सार्वत्रिक चर:
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\"/>";
फिर Page_Load
आवश्यक सभी चरणों में (या माना जाता है) का प्रदर्शन किया जाता है। वर्थ नोटिंग है SendMessage("test");
। मैंने सिर्फ यह देखने के लिए इसे वहाँ रखने की कोशिश की कि क्या यह चैट संदेश भेजने में सफल होगा ... SetUserNameAndAuthToken
मेरे मौखिक टोकन और उपयोगकर्ता नाम को वैश्विक चर में सेट करता है। The AuthToken काम करता है।
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);
}
तो मुझे एक प्रतिक्रिया मिलती है फिर मैं सर्वर को प्रतिक्रिया भेजता हूं:
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;
}
इसमें 1 मिनट 40 सेकंड लगते हैं ... और प्रतिक्रिया है:
<success xmlns='urn:ietf:params:xml:ns:xmpp-sasl'/>
अंत में मैं FinishAuthPorcess ()
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;
}
सभी प्रतिक्रियाएं हैं ""
। में Read
विधि को देखते हुए SendWithSsl
: यह 0 बाइट्स है। संदेश भेजने की कोशिश मुझे 0 बाइट्स देती है फेसबुक से डेटा पढ़ें। मुझे कोई सुराग नहीं है कि क्यों?