1 / 33

Open AIM Developer Program

Open AIM Developer Program AOL Proprietary and Confidential What is the AIM Developer Program? An engineering-driven effort at AOL to position AIM as a premier “Web 2.0” platform A comprehensive set of APIs, each targeted at different types of applications

Télécharger la présentation

Open AIM Developer Program

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Open AIM Developer Program Confidential - Internal Distribution AOL Proprietary and Confidential

  2. What is the AIM Developer Program? • An engineering-driven effort at AOL to position AIM as a premier “Web 2.0” platform • A comprehensive set of APIs, each targeted at different types of applications • A business model where AOL can freely support innovation, while retaining the ability to control and monetize the platform Confidential - Internal Distribution

  3. Goals of the AIM Developer Program • To enhance the value of the AIM network by allowing developers to innovate on our platform • To add value to other AOL properties by allowing them to leverage AIM • To make it known that AOL is interested in openness and building platforms • To derive revenue from successful innovators on the AIM platform

  4. The AIM Platform • AIMCC (AIM Developer SDK) • AIM Triton Plugins • AIM Custom Clients • AIM Bots • AIM Web Services • AIM URLs • AIM Domain Modules

  5. AIMCC • Core AIM technology library, supports all AIM functionality • High-level COM API, sits on top of COOL libraries • Like COOL, supports • Windows • Mac OS X • Linux • Windows Mobile • Uses proven third-party technology • NSS (Mozilla) for security • sipXtapi (Pingtel) or RTC (Microsoft) for audio/video • Used by AIM Triton via “im” EE service wrapper • Usable by Java via Java wrapper

  6. Presence/Buddy List IM Sessions/Chat rooms SMS/IM Forwarding Expressions and emoticons Away messages and profiles Privacy Management Preference Management Presence lookup from email Email and toaster alerts AIM location services AIM directory info Report spam/Notify AOL ICQ/federated interop File Transfer Image Transfer Buddy List Transfer File Sharing PC-PC audio calls and conferences PC-PSTN audio calls PC-PC video calls Military-grade encryption of all communications Custom presence info(coming soon) Custom peer-to-peer sessions (coming soon) And more… AIMCC Supported Functionality

  7. AIM Triton Plugins • Code that is loaded inside the AIM application when it signs onto the AIM service • In-proc COM objects, can be written using standard tools in any language that supports COM • Full AIMCC API exposed to plugins; in general, anything AIM can do, a plugin can do • AIMCC responsible for loading plugins, so plugins can function in any AIMCC-based application • Can interact with the host application UI; e.g. adding commands to AIM Triton’s “Actions” menu

  8. AIM Gadgets • First set of AIM Triton plugins; “we use it before you do” • Released to web via http://www.aim.com; current version is AIM Gadgets 2.7 • Source code for AIM Gadgets is part of AIM SDK • Demonstrates various features of the API: • Modify IMs post-send and pre-receive • Send/receive IMs • Get buddylist • Get/set profile • Get/set away message • Get/set buddy icon

  9. Some AIM Gadgets Plugins IconMaker Colorizer

  10. Demo

  11. AIM Plugin API • Plugins primarily interact with 4 main interfaces: • IAccPlugin – implemented by plugin to allow for initialization and shutdown • IAccSession – called by plugin to perform AIM operations (e.g. create IM conversation) • DAccEvents – desired event handlers implemented by plugins (e.g. when an IM is received) • IAccCommand – optional; implemented by plugin to receive commands from AIM UI

  12. // IAccPlugin // Init/term methods. Load the plugin's preferences. STDMETHODIMP CColorizer::Init(IAccSession * piAccSession, IAccPluginInfo*) { m_spiSession = piAccSession; Load(); return DispEventAdvise(m_spiSession); } STDMETHODIMP CColorizer::Shutdown() { DispEventUnadvise(m_spiSession); m_spiSession = NULL; return S_OK; } // DAccEvents // Called right before an IM is sent STDMETHODIMP CColorizer::BeforeImSend(IAccSession* session, IAccImSession* imSession, IAccUser* recipient, IAccIm* im) { time_t now = time(NULL); int hcycle = max(m_hcycle, 6); float denom = (float)hcycle / 6; float h = (now % hcycle) / denom; COLORREF cr = RgbFromHsv(h, m_s, m_v); CString text, ofont, cfont; ofont.Format(L"<FONT COLOR=\"#%02X%02X%02X\">", GetRValue(cr), GetGValue(cr), GetBValue(cr)); cfont = L"</FONT>"; CComBSTR bstr; im->get_Text(&bstr); text = bstr; int startPos = text.Find(L"<BODY"), endPos = text.Find(L"</BODY>"); if (startPos != -1 && endPos != -1) { startPos = text.Find('>', startPos); if (startPos != -1) { startPos++; text.Insert(endPos, cfont); text.Insert(startPos, ofont); text.Replace(_T("color=black"), _T("")); bstr = text; im->put_Text(bstr); } } return S_OK; } Colorizer source code

  13. AIM Custom Clients • Standalone AIM applications built on top of AIMCC • Allows for creation of specialized clients • Automatic support for AIM plugins

  14. Custom AIM Client Examples

  15. Demo

  16. accsample source code class CSampleApp : public CAccEventSink { public: HRESULT Init(const char* userName, const char* password) { HRESULT hr; if (SUCCEEDED(hr = AccCreateSession(IID_IAccSession, (void**)&m_sp)) && SUCCEEDED(hr = Advise(m_sp))) { CAccPtr<IAccClientInfo> spClientInfo; hr = m_sp->get_ClientInfo(&spClientInfo); if (SUCCEEDED(hr)) { CAccVariant desc(L"accsample (key=qa1IP9Df9Ihb_K3h)"); spClientInfo->put_Property(AccClientInfoProp_Description, desc); if (SUCCEEDED(hr = m_sp->put_Identity(CAccBstr(userName)))) hr = m_sp->SignOn(CAccBstr(password)); } } return hr; } HRESULT Run() { return AccMessageLoop(); } void Term() { Unadvise(m_sp); m_sp = NULL; } private: CAccPtr<IAccSession> m_sp; }; int main(int argc, char* argv[]) { CAccPtr<CSampleApp> sp(new CSampleApp); HRESULT hr = (sp) ? sp->Init(argv[1], argv[2]) : E_OUTOFMEMORY; if (FAILED(hr)) return (int)hr; hr = sp->Run(); sp->Term(); return (int)hr; }

  17. AIM Bots • Bots are automated AIM clients • Typically, writing a bot involves writing a lot of basic stuff for login, authentication, etc, and only basic text functionality supported • With AIMCC, all bot infrastructure is provided; developers can simply focus on their business logic • AccBot shell application loads bot “plugins” that perform the bot functionality • Bots can fully access enhanced IM functionality, including file transfer, audio/video, images • Some ideas: • Easy upload of images and podcasts to AOL Journals • Send an IM with a location, get back a map • Dial-A-Song

  18. Demo

  19. tinderbot source code // receive incoming IM private void s_OnImReceived(AccSession session, IAccImSession piImSession, IAccUser piSender, IAccIm piIm) { string plain; piIm.ConvertType("text/plain", out plain); Console.WriteLine("> [{0}] {1}", piSender.Name, plain); string url = string.Format(kTinderUrl, tree); string reply = string.Format("<HTML><BODY><A HREF={0}>{1} tinderbox</A></BODY></HTML>", url, tree); Reply(piImSession, reply); } // respond to IM private void Reply(IAccImSession piImSession, string reply) { IAccIm im = s.CreateIm(reply, null); piImSession.SendIm(im); } // check tinderbox and update buddy icon private void UpdateState() { try { string id = kErrorIconId; string url = string.Format(kQuickParseUrl, tree); HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url); . . . s.set_Property(AccSessionProp_SmallIcon, id); s.set_Property(AccSessionProp_BuddyIcon, id); } catch (Exception e) { DumpException(e); } }

  20. AIM Location Services • Currently a plugin for Triton and Open AIM clients • Opt-In plugin shares location info with users on your buddy list • Integrated with Mapquest’s API to plot buddies on the map • First plugin that uses the Boxely engine to render UI

  21. AIM Location Services • Coming soon – Ability to set a location via the web • Coming soon – Ability to set a location via a cell phone • Coming soon – Additional functionality for mapping buddies and locations

  22. AIM Location Services

  23. Demo Download the plugin: http://www.aim.com/triton/license.adp?aolp=0&download=location

  24. AIM Web Services • Two types of web services • JAWS • BIG • JAWS features • Basic/Detailed Presence • Buddy List (soon) • Expressions (soon) • BIG features • Basic Presence • Expressions • AIM Fight • We want everyone to move to JAWS

  25. JAWS • Presence service: • Simple form (returns image):http://api.oscar.aol.com/SOA/key=<key>/presence/<sn> • XML form (returns XML blob):http://api.oscar.aol.com/SOA/key=<key>/resource-lists/users/*anonymous*/presence/~~/resource-lists/list[name="users"]/entry[@uri="user:<sn>"] • “Away Page” at http://buddyinfo.aim.com/away uses XML Presence API • Can be used with or without authentication; if unauthenticated, only users with no blocked users show up • Buddylist service: • Internal only, requires authentication • Expressions service in development • Only trusted-server authentication is currently supported

  26. BIG • Old web service technology • Being deprecated since it does not support keying • Presence (returns image): • http://big.oscar.aol.com/<sn>&on_url=url1&off_url=url2 • Expressions (returns media data): • http://big.oscar.aol.com/BartSNQuery?screenname=<sn>&type=1 • AIM Fight (returns XML blob): • http://big.oscar.aol.com/PopularQuery?screenname=<sn>

  27. AIM URLs • aim: scheme URLs can allow web pages to pass commands to AIM clients • Complements AIM web services • Some examples: • aim:addBuddy?screenname=<sn> (adds buddy to buddylist) • aim:goIM?screenname=<sn> (brings up IM window) • aim:goTalk?screenname=<sn> (brings up Talk window) • aim:buddyIcon?src=<url> (sets buddy icon) • Low-tech but simple way to integrate

  28. Keys and Fingerprints • All AIM Developer APIs require keys • Keying allows us to identify who is using our network, and to restrict/deny access if abuse occurs • A key is a unique text string; common practice for Web APIs (Google Search, Google Maps) • Keys for plugins and clients require fingerprints • Fingerprinting prevents unauthorized use of a key • A fingerprint is a SHA-256 hash of a DLL or EXE • AIMCC automatically sends keys and fingerprints to the AIM servers during login • Web service requests include key in the URL

  29. Types of Keys • Separate keys for Web Services, Plugins, and Custom Clients • Plugin and client keys have different “levels” • Development key – no fingerprint required, but usage limited to ~250 logins/day • Deployment key – fingerprint required, usage limited to ~200K logins/day or 2M a month • Unlimited key – fingerprint required, no usage limits • Web services keys also have usage limits • Unlimited keys require a business relationship with AOL

  30. Limitations • The API license agreement sets a couple limitations on what you are allowed to do with the API • Spam and other bad behavior prohibited • Development of multiheaded clients using the custom client API requires OK from AOL • Building apps for mobile devices is prohibited

  31. Getting started • Official site - http://developer.aim.com to get keys and download the SDK • Read the Quickstart guide • Look at the plugin tutorials • Look at the sample code • Look at the interface docs • Let us know what obstacles you ran into

  32. Contact info • AIM Developer main page • http://developer.aim.com • Greg’s blog and email • http://members.aol.com/gbcypes • gbcypes@aol.com

More Related