slide1 l.
Download
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


  • 375 Views
  • 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

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
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
slide1

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
aimcc
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
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 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
Some AIM Gadgets Plugins

IconMaker

Colorizer

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
slide12

// 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
AIM Custom Clients
  • Standalone AIM applications built on top of AIMCC
  • Allows for creation of specialized clients
  • Automatic support for AIM plugins
slide16

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
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
slide19

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
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
slide23

Demo

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

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
slide25
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
slide26
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 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
limitations
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
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
Contact info
  • AIM Developer main page
    • http://developer.aim.com
  • Greg’s blog and email
    • http://members.aol.com/gbcypes
    • gbcypes@aol.com