slide1 l.
Skip this Video
Loading SlideShow in 5 Seconds..
Open AIM Developer Program PowerPoint Presentation
Download Presentation
Open AIM Developer Program

Loading in 2 Seconds...

play fullscreen
1 / 33

Open AIM Developer Program - PowerPoint PPT Presentation

  • Uploaded on

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

I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
Download Presentation

PowerPoint Slideshow about 'Open AIM Developer Program' - daniel_millan

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.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.

- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript

Open AIM Developer Program

Confidential - Internal Distribution

AOL Proprietary and Confidential

what is the aim developer program
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
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
The AIM Platform
  • AIMCC (AIM Developer SDK)
    • AIM Triton Plugins
    • AIM Custom Clients
    • AIM Bots
  • AIM Web Services
  • AIM URLs
  • AIM Domain Modules
  • 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
aimcc supported functionality
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
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
AIM Gadgets
  • First set of AIM Triton plugins; “we use it before you do”
  • Released to web via; 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
Some AIM Gadgets Plugins



aim plugin api
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;


return DispEventAdvise(m_spiSession);


STDMETHODIMP CColorizer::Shutdown()



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)



text.Insert(endPos, cfont);

text.Insert(startPos, ofont);

text.Replace(_T("color=black"), _T(""));

bstr = text;




return S_OK;



source code

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


source code

class CSampleApp : public CAccEventSink



HRESULT Init(const char* userName, const char* password)



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; }


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();


return (int)hr;


aim bots
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


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);



// check tinderbox and update buddy icon

private void UpdateState()




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)





aim location services
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 services21
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


Download the plugin:

aim web services
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
  • Presence service:
    • Simple form (returns image):<key>/presence/<sn>
    • XML form (returns XML blob):<key>/resource-lists/users/*anonymous*/presence/~~/resource-lists/list[name="users"]/entry[@uri="user:<sn>"]
    • “Away Page” at 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
  • Old web service technology
  • Being deprecated since it does not support keying
  • Presence (returns image):
  • Expressions (returns media data):
  • AIM Fight (returns XML blob):
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
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
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
  • 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
Getting started
  • Official site - 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
Contact info
  • AIM Developer main page
  • Greg’s blog and email