330 likes | 799 Views
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
E N D
Open AIM Developer Program Confidential - Internal Distribution 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 • A business model where AOL can freely support innovation, while retaining the ability to control and monetize the platform Confidential - Internal Distribution
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
The AIM Platform • AIMCC (AIM Developer SDK) • AIM Triton Plugins • AIM Custom Clients • AIM Bots • AIM Web Services • AIM URLs • AIM Domain Modules
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
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
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
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
Some AIM Gadgets Plugins IconMaker Colorizer
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
// 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
AIM Custom Clients • Standalone AIM applications built on top of AIMCC • Allows for creation of specialized clients • Automatic support for AIM plugins
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; }
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
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); } }
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
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
Demo Download the plugin: http://www.aim.com/triton/license.adp?aolp=0&download=location
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
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
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>
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
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
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
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
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
Contact info • AIM Developer main page • http://developer.aim.com • Greg’s blog and email • http://members.aol.com/gbcypes • gbcypes@aol.com