<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;D0AERn8zeyp7ImA9WhRVEUo.&quot;"><id>tag:blogger.com,1999:blog-5658388309594372146</id><updated>2012-01-10T03:08:27.183-03:00</updated><category term="guidelines" /><category term="Vikram Goyal" /><category term="sms" /><category term="swing" /><category term="eswt" /><category term="bug" /><category term="plug-in" /><category term="ovi store" /><category term="how to" /><category term="analytics" /><category term="api" /><category term="linkedin" /><category term="jsr-256" /><category term="scmad" /><category term="iphone" /><category term="comparative" /><category term="twitter api me" /><category term="spring" /><category term="java verified" /><category term="sparrow" /><category term="app" /><category term="tv" /><category term="eclipse" /><category term="windows mobile" /><category term="facebook api me" /><category term="review" /><category term="ucertify" /><category term="midp 3.0" /><category term="J2SE" /><category term="tech days" /><category term="floggy" /><category term="contest" /><category term="facebook" /><category term="midlet" /><category term="kuix" /><category term="cdc" /><category term="XML" /><category term="liblet" /><category term="getjar" /><category term="ui" /><category term="android" /><category term="welcome" /><category term="blue-ray" /><category term="persistence" /><category term="sony ericsson" /><category term="mac" /><category term="market" /><category term="ecomate" /><category term="screen saver" /><category term="flash lite" /><category term="framework" /><category term="JavaScript" /><category term="J2EE" /><category term="lib adme ad" /><category term="hotspot" /><category term="jsr-135" /><category term="porting" /><category term="flurry" /><category term="setup" /><category term="app store" /><category term="s40" /><category term="life cycle" /><category term="conference" /><category term="m-stock app" /><category term="http" /><category term="bd-j" /><category term="motodev" /><category term="nokia" /><category term="sound" /><category term="jbed" /><category term="sdk" /><category term="javaone" /><category term="rim" /><category term="xauth" /><category term="oauth" /><category term="canvas" /><category term="motorola" /><category term="lcdui" /><category term="kvm" /><category term="JSON" /><category term="debug" /><category term="javafx" /><category term="dependency injection" /><category term="workaround" /><category term="logger" /><category term="lwuit" /><category term="wtk" /><category term="tutorial" /><category term="idle screen midlet" /><category term="MSA2" /><category term="award" /><category term="book" /><category term="Google" /><category term="MSA" /><category term="tip" /><category term="ad" /><category term="JCP" /><category term="certification" /><category term="JTWI" /><category term="blackberry" /><category term="twitter" /><category term="dvb-h" /><category term="investment" /><category term="sensor" /><category term="s60" /><category term="article" /><category term="xlet" /><category term="capuchin" /><title>J2ME Group</title><subtitle type="html">This is the blog of J2ME Group on LinkedIn, which is intended to professionals, developers and enthusiasts that want to expand and share their knowledge and experience on this outstanding platform for mobile applications development.</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://j2megroup.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://j2megroup.blogspot.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/5658388309594372146/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Ernandes Mourão Júnior</name><uri>http://www.blogger.com/profile/05269717786146137246</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="33" height="26" src="http://4.bp.blogspot.com/_mIej7YtLRRM/STwlvtdLMGI/AAAAAAAAAvg/3hmiXcqcfZE/S220/Picture.jpg" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>85</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/J2meGroup" /><feedburner:info uri="j2megroup" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;DkYDQH4_fSp7ImA9WhRWFUQ.&quot;"><id>tag:blogger.com,1999:blog-5658388309594372146.post-4364953645105288158</id><published>2012-01-03T09:36:00.000-03:00</published><updated>2012-01-03T09:36:11.045-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-03T09:36:11.045-03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="api" /><category scheme="http://www.blogger.com/atom/ns#" term="Google" /><category scheme="http://www.blogger.com/atom/ns#" term="analytics" /><category scheme="http://www.blogger.com/atom/ns#" term="android" /><title>Google Analytics ME v2.0: Unique visitors</title><content type="html">Hi, all&lt;br /&gt;
&lt;br /&gt;
Today, I would like to announce that &lt;b&gt;Google Analytics ME v2.0&lt;/b&gt; has been released. This new version comes with some good news and important changes. See them below:&lt;br /&gt;
&lt;br /&gt;
- Identification of unique visitors.&lt;br /&gt;
- Better visitor's features identification.&lt;br /&gt;
- Small code refactoring.&lt;br /&gt;
- Android support deprecated.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Identification of unique visitors&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Now GAN ME identifies properly who is a new visitor or not. This way, your visitors report is 100% accurate about the number of new and old visitors.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Better visitor's features identification&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
More visitor's features are being collected by GAN ME. For instance, now the app's name, version, screen size and number of colors are being collected.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Small code refactoring&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
To implement some of the new features and fix some of the bugs, some code changes were required, which may cause some compilation errors for your app. But it is not a big deal from developer's view. Actually, most developers will just have to fix the call to Tracker.getInstance(), which now requires to pass the MIDlet instance as well as the GAN app Id.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Android support deprecated&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
From this version on, we decided to deprecate the Android support. It turns out that there is already an official &lt;a href="http://goo.gl/8Qm2b" target="_blank"&gt;GAN API for Android&lt;/a&gt;, built by Google. So, we strongly recommend you to use that one in your Android app. It is very good!&lt;br /&gt;
&lt;br /&gt;
I hope everybody enjoy this new version. Let me know your feedback.&lt;br /&gt;
&lt;br /&gt;
To download the API, click &lt;a href="http://kenai.com/projects/googleanalyticsme/downloads" target="_blank"&gt;here!&lt;/a&gt; By the way, inside the package there is a sample app for reference.&lt;br /&gt;
&lt;br /&gt;
See you in the next post...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5658388309594372146-4364953645105288158?l=j2megroup.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/1LhvYS603Kq5mB7ticxQoZhdCPw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/1LhvYS603Kq5mB7ticxQoZhdCPw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/1LhvYS603Kq5mB7ticxQoZhdCPw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/1LhvYS603Kq5mB7ticxQoZhdCPw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/J2meGroup/~4/XJebLhpwIVk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://j2megroup.blogspot.com/feeds/4364953645105288158/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5658388309594372146&amp;postID=4364953645105288158&amp;isPopup=true" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5658388309594372146/posts/default/4364953645105288158?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5658388309594372146/posts/default/4364953645105288158?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/J2meGroup/~3/XJebLhpwIVk/google-analytics-me-v20-unique-visitors.html" title="Google Analytics ME v2.0: Unique visitors" /><author><name>Ernandes Mourão Júnior</name><uri>http://www.blogger.com/profile/05269717786146137246</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="33" height="26" src="http://4.bp.blogspot.com/_mIej7YtLRRM/STwlvtdLMGI/AAAAAAAAAvg/3hmiXcqcfZE/S220/Picture.jpg" /></author><thr:total>1</thr:total><feedburner:origLink>http://j2megroup.blogspot.com/2012/01/google-analytics-me-v20-unique-visitors.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkENSHc9eCp7ImA9WhRQEUo.&quot;"><id>tag:blogger.com,1999:blog-5658388309594372146.post-3023901874895326774</id><published>2011-12-06T09:31:00.000-03:00</published><updated>2011-12-06T09:31:39.960-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-06T09:31:39.960-03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="http" /><category scheme="http://www.blogger.com/atom/ns#" term="s40" /><category scheme="http://www.blogger.com/atom/ns#" term="nokia" /><category scheme="http://www.blogger.com/atom/ns#" term="bug" /><category scheme="http://www.blogger.com/atom/ns#" term="s60" /><title>Multiple HTTP Headers: No cookie for you</title><content type="html">Hi, all&lt;br /&gt;
&lt;br /&gt;
As you may know, &lt;a href="http://en.wikipedia.org/wiki/HTTP_cookie" target="_blank"&gt;HTTP Cookies&lt;/a&gt; are mostly used to track sessions between a client and a server. The flow is pretty simple: you access a server and it returns a piece of information (a cookie), which the client stores, in order to send back in every subsequent request. Based on this cookie, the server identifies the client.&lt;br /&gt;
&lt;br /&gt;
Unfortunately, this session management must be handled by the developer, since &lt;i&gt;HttpConnection&lt;/i&gt; does not do that automatically. This is achieved in a very simple way and a few lines of code. If do not know how to do it, please learn now &lt;a href="http://www.developer.nokia.com/Community/Wiki/Session_management_in_Java_ME" target="_blank"&gt;here&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
According to the example at Nokia's page, session management using a single cookie is very easy. How about two? It should be easy as well. Instead of only one, now you have to store two and send them back.&lt;br /&gt;
&lt;br /&gt;
In a project that I am currently working on, there are two cookies to manage the session. As I said above, it is very easy, right? It should be. I am porting a code from Nokia S60 5th Edition series to S40 6th Edition. This session management works like a charm, but it fails on S40. Any guess? No? Read the post's title again. The answer is:&lt;br /&gt;
&lt;br /&gt;
Series 40 platform devices up to Series 40 6th Edition and Series 40 5th Edition, Feature Pack 1 Lite, and S60 devices prior to S60 3rd Edition, Feature Pack 1 &lt;a href="http://www.developer.nokia.com/Community/Wiki/KIJ000854_-_Multiple_HTTP_headers_of_the_same_type_cannot_be_handled" target="_blank"&gt;does not support multiple HTTP header&lt;/a&gt;. It means that two cookie cannot be handled, because only one is available. Nice, hah?&lt;br /&gt;
&lt;br /&gt;
Long story short, we had to implement a workaround in our server for S40 version, where only one cookie is used for session management. As a consequence of it, this version accesses a no scalable server, since the second cookie was used for load balancer.&lt;br /&gt;
&lt;br /&gt;
W.O.R.A does not work so well on mobile devices.&lt;br /&gt;
&lt;br /&gt;
See you in the next post...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5658388309594372146-3023901874895326774?l=j2megroup.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/LRN5L6Wr1MWqOyS2G-wB3pvpNCw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/LRN5L6Wr1MWqOyS2G-wB3pvpNCw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/LRN5L6Wr1MWqOyS2G-wB3pvpNCw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/LRN5L6Wr1MWqOyS2G-wB3pvpNCw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/J2meGroup/~4/IFDVaH1PcEA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://j2megroup.blogspot.com/feeds/3023901874895326774/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5658388309594372146&amp;postID=3023901874895326774&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5658388309594372146/posts/default/3023901874895326774?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5658388309594372146/posts/default/3023901874895326774?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/J2meGroup/~3/IFDVaH1PcEA/multiple-http-headers-no-cookie-for-you.html" title="Multiple HTTP Headers: No cookie for you" /><author><name>Ernandes Mourão Júnior</name><uri>http://www.blogger.com/profile/05269717786146137246</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="33" height="26" src="http://4.bp.blogspot.com/_mIej7YtLRRM/STwlvtdLMGI/AAAAAAAAAvg/3hmiXcqcfZE/S220/Picture.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://j2megroup.blogspot.com/2011/12/multiple-http-headers-no-cookie-for-you.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CE4AQ3Yzfip7ImA9WhdUGUg.&quot;"><id>tag:blogger.com,1999:blog-5658388309594372146.post-5847130324998502666</id><published>2011-10-06T23:02:00.000-03:00</published><updated>2011-10-06T23:02:22.886-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-06T23:02:22.886-03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="twitter api me" /><category scheme="http://www.blogger.com/atom/ns#" term="xauth" /><category scheme="http://www.blogger.com/atom/ns#" term="oauth" /><title>Twitter API ME 1.8: Now with OAuth support</title><content type="html">Hi, all&lt;br /&gt;
&lt;br /&gt;
It's been a long time since my last post, but besides being a little bit busy, I also took a vacation, enjoying a trip to US, to visit some old friends. Great trip, by the way. But now, let's get back to work!&lt;br /&gt;
&lt;br /&gt;
One thing that kept me busy during this time was the implementation of &lt;b&gt;&lt;a href="http://kenai.com/projects/twitterapime" target="_blank"&gt;Twitter API ME 1.8&lt;/a&gt;&lt;/b&gt;. This new version is very special, because it comes with full support to &lt;a href="https://dev.twitter.com/docs/auth/oauth" target="_blank"&gt;&lt;b&gt;OAuth&lt;/b&gt;&lt;/a&gt;. Since Twitter changed its &lt;a href="https://dev.twitter.com/docs/application-permission-model" target="_blank"&gt;Application Permission Model&lt;/a&gt;, requiring apps to use OAuth to have access to user's direct messages, Twitter API ME developers were not longer able to access DMs from their apps. Before v1.8, only&amp;nbsp;&lt;a href="https://dev.twitter.com/docs/oauth/xauth" target="_blank"&gt;xAuth&lt;/a&gt;&amp;nbsp;was supported.&lt;br /&gt;
&lt;br /&gt;
Other great thing about OAuth is that developers will no longer need to request xAuth permission to Twitter for their apps keys, in order to start working with the API. Since OAuth flow is more secure, Twitter trusts promptly any registered app, because there is no way for apps to get access to user's password. So, no more you have to wait days or until your app is done, so Twitter decides to grant you permission.&lt;br /&gt;
&lt;br /&gt;
It is also important to point out, OAuth is available for all platforms supported: Java ME, Android and RIM.&lt;br /&gt;
&lt;br /&gt;
Besides OAuth, Twitter API ME 1.8 comes with other news:&lt;br /&gt;
&lt;br /&gt;
- Possibility to configure additional connection parameters for RIM platform.&lt;br /&gt;
- Improved RIM connection string solving the issue of when the devices is&amp;nbsp;subscribed to BIS.&lt;br /&gt;
- Geo-located Trend search based on &lt;a href="http://developer.yahoo.com/geo/geoplanet/" target="_blank"&gt;Yahoo! Where On Earth ID&lt;/a&gt;.&lt;br /&gt;
- Bug fixes and replacement of some deprecated Twitter API's resources.&lt;br /&gt;
&lt;br /&gt;
I am really glad to have one more version of this successful project released. In addition, I would also like to thank everybody that contributed with the project, reporting bugs and requesting new features through our &lt;a href="http://kenai.com/projects/twitterapime/pages/ExpressSupport" target="_blank"&gt;Express Support&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
I strongly recommend you to migrate to v1.8 right away. So, download it now from &lt;a href="http://kenai.com/projects/twitterapime/downloads/directory/1.8" target="_blank"&gt;here&lt;/a&gt;. I also prepared some sample apps to help developers to understand how to integrate OAuth into their apps. Just click &lt;a href="http://kenai.com/projects/twitterapime/downloads/directory/Miscellaneous" target="_blank"&gt;here&lt;/a&gt; and have fun.&lt;br /&gt;
&lt;br /&gt;
See you in the next post...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5658388309594372146-5847130324998502666?l=j2megroup.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/rs3CQFvkdfU6uvDFpGgVYDfWfvA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/rs3CQFvkdfU6uvDFpGgVYDfWfvA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/rs3CQFvkdfU6uvDFpGgVYDfWfvA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/rs3CQFvkdfU6uvDFpGgVYDfWfvA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/J2meGroup/~4/oia0YNMj-9U" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://j2megroup.blogspot.com/feeds/5847130324998502666/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5658388309594372146&amp;postID=5847130324998502666&amp;isPopup=true" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5658388309594372146/posts/default/5847130324998502666?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5658388309594372146/posts/default/5847130324998502666?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/J2meGroup/~3/oia0YNMj-9U/twitter-api-me-18-now-with-oauth.html" title="Twitter API ME 1.8: Now with OAuth support" /><author><name>Ernandes Mourão Júnior</name><uri>http://www.blogger.com/profile/05269717786146137246</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="33" height="26" src="http://4.bp.blogspot.com/_mIej7YtLRRM/STwlvtdLMGI/AAAAAAAAAvg/3hmiXcqcfZE/S220/Picture.jpg" /></author><thr:total>4</thr:total><feedburner:origLink>http://j2megroup.blogspot.com/2011/10/twitter-api-me-18-now-with-oauth.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ck4BRHw_fyp7ImA9WhZbFUo.&quot;"><id>tag:blogger.com,1999:blog-5658388309594372146.post-4914371966906395291</id><published>2011-06-20T08:55:00.000-03:00</published><updated>2011-06-20T08:55:55.247-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-06-20T08:55:55.247-03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="facebook api me" /><category scheme="http://www.blogger.com/atom/ns#" term="android" /><title>Facebook API ME for Android</title><content type="html">Hi, all&lt;br /&gt;
&lt;br /&gt;
Continuing the announcements on Facebook API ME, yesterday, I released&amp;nbsp;&lt;b&gt;&lt;a href="http://kenai.com/projects/facebookapime" target="_blank"&gt;Facebook API ME&lt;/a&gt;&lt;/b&gt; v1.0 for &lt;b&gt;Android&lt;/b&gt;. This version uses &lt;b&gt;&lt;a href="http://developer.android.com/reference/android/webkit/WebView.html" target="_blank"&gt;WebView&lt;/a&gt;&lt;/b&gt;&amp;nbsp;component from Android API to display the authentication page. As I explained in this&amp;nbsp;&lt;a href="http://j2megroup.blogspot.com/2011/06/facebook-api-me-10-tutorial.html" target="_blank"&gt;tutorial&lt;/a&gt;, to use the API for other platforms, you just need to work with the respective wrapper class for the target platform. Regarding Android, you will have to use &lt;b&gt;&lt;i&gt;WebViewAuthDialogWrapper&lt;/i&gt;&lt;/b&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;...&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;WebView webView = ...;&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;AuthDialogWrapper pageWrapper =&amp;nbsp;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;new &lt;/i&gt;&lt;i&gt;WebView&lt;/i&gt;&lt;i&gt;AuthDialogWrapper(&lt;/i&gt;&lt;i&gt;webView&lt;/i&gt;&lt;i&gt;);&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;pageWrapper.setAppId("App Id goes here");&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;pageWrapper.setAppSecret("App Secret goes here");&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;pageWrapper.setRedirectUri("Redirect Uri goes here");&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;pageWrapper.setPermissions(new String[] {Permission.OFFLINE_ACCESS, Permission.PUBLISH_STREAM});&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;pageWrapper.addAuthenticationListener(this);&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;pageWrapper.login();&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;...&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
Besides the release package, there is also a sample app demonstrating how to implement the authentication process for this platform. Here it goes the download &lt;a href="http://kenai.com/projects/facebookapime/downloads" target="_blank"&gt;link&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
I hope you guys enjoy it.&lt;br /&gt;
&lt;br /&gt;
See you in the next post...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5658388309594372146-4914371966906395291?l=j2megroup.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/XQdhPL8cJj3uZwHZ71eSuqFvZ6Y/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/XQdhPL8cJj3uZwHZ71eSuqFvZ6Y/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/XQdhPL8cJj3uZwHZ71eSuqFvZ6Y/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/XQdhPL8cJj3uZwHZ71eSuqFvZ6Y/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/J2meGroup/~4/PLzS5aGFK10" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://j2megroup.blogspot.com/feeds/4914371966906395291/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5658388309594372146&amp;postID=4914371966906395291&amp;isPopup=true" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5658388309594372146/posts/default/4914371966906395291?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5658388309594372146/posts/default/4914371966906395291?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/J2meGroup/~3/PLzS5aGFK10/facebook-api-me-for-android.html" title="Facebook API ME for Android" /><author><name>Ernandes Mourão Júnior</name><uri>http://www.blogger.com/profile/05269717786146137246</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="33" height="26" src="http://4.bp.blogspot.com/_mIej7YtLRRM/STwlvtdLMGI/AAAAAAAAAvg/3hmiXcqcfZE/S220/Picture.jpg" /></author><thr:total>2</thr:total><feedburner:origLink>http://j2megroup.blogspot.com/2011/06/facebook-api-me-for-android.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkcMRX06fSp7ImA9WhZbFE4.&quot;"><id>tag:blogger.com,1999:blog-5658388309594372146.post-5008205945592719890</id><published>2011-06-18T18:54:00.002-03:00</published><updated>2011-06-18T18:54:44.315-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-06-18T18:54:44.315-03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="facebook api me" /><category scheme="http://www.blogger.com/atom/ns#" term="blackberry" /><category scheme="http://www.blogger.com/atom/ns#" term="rim" /><title>Facebook API ME for Blackberry</title><content type="html">Hi, all&lt;br /&gt;
&lt;br /&gt;
This afternoon, I released&amp;nbsp;&lt;b&gt;&lt;a href="http://kenai.com/projects/facebookapime" target="_blank"&gt;Facebook API ME&lt;/a&gt;&lt;/b&gt; v1.0 for &lt;b&gt;Blackberry&lt;/b&gt;. This version uses &lt;b&gt;&lt;a href="http://www.blackberry.com/developers/docs/5.0.0api/net/rim/device/api/browser/field2/BrowserField.html" target="_blank"&gt;BrowserField&lt;/a&gt;&lt;/b&gt;&amp;nbsp;component from RIM API to display the authentication page. As I explained in this&amp;nbsp;&lt;a href="http://j2megroup.blogspot.com/2011/06/facebook-api-me-10-tutorial.html" target="_blank"&gt;tutorial&lt;/a&gt;, to use the API for other platforms, you just need to work with the respective wrapper class for the target platform. Regarding Blackberry, you will have to use&amp;nbsp;&lt;b&gt;&lt;i&gt;BrowserFieldAuthDialogWrapper&lt;/i&gt;&lt;/b&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;...&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;BrowserField browserField = ...;&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;AuthDialogWrapper pageWrapper =&amp;nbsp;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;new BrowserFieldAuthDialogWrapper(browserField);&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;pageWrapper.setAppId("App Id goes here");&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;pageWrapper.setAppSecret("App Secret goes here");&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;pageWrapper.setRedirectUri("Redirect Uri goes here");&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;pageWrapper.setPermissions(new String[] {Permission.OFFLINE_ACCESS, Permission.PUBLISH_STREAM});&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;pageWrapper.addAuthenticationListener(this);&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;pageWrapper.login();&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;...&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
Besides the release package, there is also a sample app demonstrating how to implement the authentication process for this platform. Here it goes the download &lt;a href="http://kenai.com/projects/facebookapime/downloads" target="_blank"&gt;link&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
I hope you guys enjoy it.&lt;br /&gt;
&lt;br /&gt;
See you in the next post...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5658388309594372146-5008205945592719890?l=j2megroup.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/onn0UQ-KNwJmTtom7eGPyTecqaM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/onn0UQ-KNwJmTtom7eGPyTecqaM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/onn0UQ-KNwJmTtom7eGPyTecqaM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/onn0UQ-KNwJmTtom7eGPyTecqaM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/J2meGroup/~4/gqZEygzImEQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://j2megroup.blogspot.com/feeds/5008205945592719890/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5658388309594372146&amp;postID=5008205945592719890&amp;isPopup=true" title="5 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5658388309594372146/posts/default/5008205945592719890?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5658388309594372146/posts/default/5008205945592719890?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/J2meGroup/~3/gqZEygzImEQ/facebook-api-me-for-blackberry.html" title="Facebook API ME for Blackberry" /><author><name>Ernandes Mourão Júnior</name><uri>http://www.blogger.com/profile/05269717786146137246</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="33" height="26" src="http://4.bp.blogspot.com/_mIej7YtLRRM/STwlvtdLMGI/AAAAAAAAAvg/3hmiXcqcfZE/S220/Picture.jpg" /></author><thr:total>5</thr:total><feedburner:origLink>http://j2megroup.blogspot.com/2011/06/facebook-api-me-for-blackberry.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUEGQXk7eCp7ImA9WhZUF08.&quot;"><id>tag:blogger.com,1999:blog-5658388309594372146.post-6980223664461785582</id><published>2011-06-10T14:40:00.000-03:00</published><updated>2011-06-10T14:40:20.700-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-06-10T14:40:20.700-03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="twitter api me" /><category scheme="http://www.blogger.com/atom/ns#" term="android" /><title>Twitter API ME v1.7 and TwAPIme for Android App v1.0 (open source)</title><content type="html">Hi, all&lt;br /&gt;
&lt;br /&gt;
Today, I am proud to announce that &lt;span style="font-weight: bold;"&gt;&lt;a href="http://kenai.com/projects/twitterapime" target="_blank"&gt;Twitter API ME&lt;/a&gt; v1.7&lt;/span&gt;  was finally released. This new version comes with a bunch of new  functionalities, improvements and bug fixes. A special fact in this  release is that all new functionalities implemented were requested by  developers. All of them through our &lt;a href="http://kenai.com/projects/twitterapime/pages/ExpressSupport"&gt;&lt;span style="font-weight: bold;" target="_blank"&gt;Express Support&lt;/span&gt;&lt;/a&gt;. So, thank you very much to those developers and their respective companies that contributed to this project.&lt;br /&gt;
&lt;br /&gt;
As I said, this version comes with a great number of news. Check them out:&lt;br /&gt;
&lt;br /&gt;
- Reply tweet&lt;br /&gt;
- Timeline of favorite tweets&lt;br /&gt;
- Favorite/unfavorite tweet&lt;br /&gt;
- User search&lt;br /&gt;
- User lookup&lt;br /&gt;
- Get friends and followers (full objects, not just id)&lt;br /&gt;
- Get friendship details between two users&lt;br /&gt;
- New attributes in MetadataSet class&lt;br /&gt;
- Bug fixes related to authentication using e-mail address instead of username&lt;br /&gt;
&lt;br /&gt;
As you can see, you will have a lot of work to integrate those new functions into your app.&lt;br /&gt;
&lt;br /&gt;
This version also comes with some &lt;span style="font-weight: bold;"&gt;remarks&lt;/span&gt;:&lt;br /&gt;
&lt;br /&gt;
- From this version on the release's jar file is no longer preverified  for Java ME and RIM platforms. It is not necessary, because you will do  that when you build your application.&lt;br /&gt;
&lt;br /&gt;
- You can now obfuscate your app with Twitter API ME's jar file without  adding any rule to your obfuscator. No class is instantiated using  reflection any more.&lt;br /&gt;
&lt;br /&gt;
- HTTP Basic Authentication support was completely removed from source code.&lt;br /&gt;
&lt;br /&gt;
Besides all those great news, there is one more thing (Apple like &lt;img alt="Tongue" src="http://kenai.com/images/forum/tongue.png" /&gt;): &lt;span style="font-weight: bold;"&gt;TwAPIme for Android app&lt;/span&gt;. This an &lt;span style="font-weight: bold;"&gt;open source&lt;/span&gt; Twitter Android client app totally developed using Twitter API ME v1.7.&lt;br /&gt;
&lt;br /&gt;
I expected to publish this app on Android Market at the same time v1.7  was released, but unfortunately, for time reason, it was not possible  yet. Any way, you guys may already check out this good app. I believe it  will be worthy for all developers. Find below some features available  in this app:&lt;br /&gt;
&lt;br /&gt;
- View Home, Mentions, DM and List timeline&lt;br /&gt;
- Post Tweet&lt;br /&gt;
- Send DM&lt;br /&gt;
- Reply and comment tweet&lt;br /&gt;
- Favorite/unfavorite tweet&lt;br /&gt;
- Retweet&lt;br /&gt;
- View user profile&lt;br /&gt;
- View user's lists&lt;br /&gt;
- View List's members&lt;br /&gt;
- Follow/unfollow user&lt;br /&gt;
- Block/unblock user&lt;br /&gt;
- Users search&lt;br /&gt;
- Report spammer&lt;br /&gt;
&lt;br /&gt;
However, it comes with an important remark that must observed by everybody: &lt;span style="font-weight: bold;"&gt;Terms of Use&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;This source code is &lt;span style="font-weight: bold;"&gt;FREE ONLY for NON-commercial&lt;/span&gt;  purposes. Actually, you can change it, add new features, fix bugs, etc.  However, if you intend to release it as an app of yours, be aware it  MUST be 100% FREE, besides making clear it is powered by Twitter API ME  project and providing a link to website's project.&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
I recommend everybody to read the READ-ME.txt file contained in the release package of Twitter API ME and TwAPIme for Android.&lt;br /&gt;
&lt;br /&gt;
So, here it goes the links to download the releases:&lt;br /&gt;
&lt;br /&gt;
Twitter API ME v1.7&lt;br /&gt;
&lt;a href="http://kenai.com/projects/twitterapime/downloads/directory/1.7" target="_blank"&gt;http://kenai.com/projects/twitterapime/downloads/directory/1.7&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
TwAPIme for Android v1.0&lt;br /&gt;
&lt;a href="http://kenai.com/projects/twitterapime/downloads/directory/TwAPIme" target="_blank"&gt;http://kenai.com/projects/twitterapime/downloads/directory/TwAPIme&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
So, I hope everybody enjoys all the news.&lt;br /&gt;
&lt;br /&gt;
See you in the next post...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5658388309594372146-6980223664461785582?l=j2megroup.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/A7rWphYfwf9cW53cGmQdqr0s3oQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/A7rWphYfwf9cW53cGmQdqr0s3oQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/A7rWphYfwf9cW53cGmQdqr0s3oQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/A7rWphYfwf9cW53cGmQdqr0s3oQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/J2meGroup/~4/bkPPC7-Vbz0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://j2megroup.blogspot.com/feeds/6980223664461785582/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5658388309594372146&amp;postID=6980223664461785582&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5658388309594372146/posts/default/6980223664461785582?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5658388309594372146/posts/default/6980223664461785582?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/J2meGroup/~3/bkPPC7-Vbz0/twitter-api-me-v17-and-twapime-for.html" title="Twitter API ME v1.7 and TwAPIme for Android App v1.0 (open source)" /><author><name>Ernandes Mourão Júnior</name><uri>http://www.blogger.com/profile/05269717786146137246</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="33" height="26" src="http://4.bp.blogspot.com/_mIej7YtLRRM/STwlvtdLMGI/AAAAAAAAAvg/3hmiXcqcfZE/S220/Picture.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://j2megroup.blogspot.com/2011/06/twitter-api-me-v17-and-twapime-for.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEUERXo8fip7ImA9WhZUFEg.&quot;"><id>tag:blogger.com,1999:blog-5658388309594372146.post-3960793459718982062</id><published>2011-06-05T14:11:00.001-03:00</published><updated>2011-06-07T11:16:44.476-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-06-07T11:16:44.476-03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="facebook api me" /><category scheme="http://www.blogger.com/atom/ns#" term="facebook" /><category scheme="http://www.blogger.com/atom/ns#" term="tutorial" /><title>Facebook API ME 1.0: Tutorial</title><content type="html">Hi, all&lt;br /&gt;
&lt;br /&gt;
As I announced yesterday on Twitter, the first release of &lt;b&gt;Facebook API ME&lt;/b&gt; is now available for &lt;a href="http://kenai.com/projects/facebookapime/downloads" target="_blank"&gt;download&lt;/a&gt;. Besides the release package, there is also a sample app, demonstrating how to implement the authentication process.&lt;br /&gt;
&lt;br /&gt;
For while, only the version for &lt;b&gt;&lt;a href="http://www.eclipse.org/ercp/" target="_blank"&gt;eSWT&lt;/a&gt;&lt;/b&gt; is released. So, if your target device supports eSWT, you will be able to use this package in your Java ME app right away. I am also working on other versions targeted to &lt;b&gt;Blackberry&lt;/b&gt;, &lt;b&gt;LWUIT&lt;/b&gt; and &lt;b&gt;Android&lt;/b&gt;. All of them are now under test phase. I hope to release them very soon. On the other hand, if you cant't wait, check out the source code from the project's &lt;a href="http://kenai.com/projects/facebookapime/sources/facebook-api-me-rep/show" target="_blank"&gt;repository&lt;/a&gt;. You need to add yourself to the project as an Observer member to be able to check out.&lt;br /&gt;
&lt;br /&gt;
Let's start the tutorial!&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Registering an App&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
You need to register an app on &lt;b&gt;Facebook's Developer&lt;/b&gt; &lt;a href="http://developers.facebook.com/" target="_blank"&gt;page&lt;/a&gt;. The process is pretty simple and straightforward. The goal of this registration is to obtain some keys that are required by authentication process: &lt;b&gt;App Id&lt;/b&gt;, &lt;b&gt;App Secret&lt;/b&gt; and &lt;b&gt;Redirect Uri&lt;/b&gt;. This process is very similar to Twitter's app registration process.&lt;br /&gt;
&lt;br /&gt;
Once you have the keys, let get to the API itself.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Browser Component&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
In your app, you need to display Facebook's Login page, so your user can enter his credentials and then grant access to your app. This process is implemented by the API. You just need to provide a browser component instance and then the API takes care of the rest. Considering the eSWT version, you need to provide an instance of &lt;i&gt;&lt;a href="http://www.eclipse.org/ercp/eswt/gallery/gallery.php" target="_blank"&gt;&lt;b&gt;Browser&lt;/b&gt;&lt;/a&gt;&lt;/i&gt; class.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Wrapper Class&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Once the browser instance is created, you have to wrap it with an instance of &lt;i&gt;&lt;b&gt;AuthDialogWrapper&lt;/b&gt;&lt;/i&gt; class. This class is responsible for managing the authentication and delegates the events to your app. Considering the eSWT version, you have to instantiate the &lt;i&gt;&lt;b&gt;BrowserAuthDialogWrapper&lt;/b&gt;&lt;/i&gt;&amp;nbsp;subclass.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Setting Up the Keys&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
The wrapper object must be set up, so it can handle the authentication process properly for you app. There are some "set" methods that can be used to inform your App Id, App Secret and Redirect Uri. If you prefer, you can enter the keys in the constructor.&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;...&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;Browser browser = new Browser(browserComp, SWT.TOP);&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;br /&gt;
&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;AuthDialogWrapper pageWrapper = new BrowserAuthDialogWrapper(browser);&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;pageWrapper.setAppId("App Id goes here");&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;pageWrapper.setAppSecret("App Secret goes here");&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;pageWrapper.setRedirectUri("Redirect Uri goes here");&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;...&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Permissions&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Most services provided by Facebook API requires explicit authorization by user. So, during the authentication process you must inform which permissions the services that you intend to work with, must be granted by user.&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;...&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;pageWrapper.setPermissions(new String[] {Permission.OFFLINE_ACCESS,  Permission.PUBLISH_STREAM});&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;...&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
This code snippet says the app will request permission to perform authorized requests on behalf of the user at any time (&lt;b&gt;OFFLINE_ACCESS&lt;/b&gt;) and publish content to a user's feed at any time &lt;b&gt;PUBLISH_STREAM&lt;/b&gt;. For the full list of permissions provided by Facebook API, click &lt;a href="http://developers.facebook.com/docs/authentication/permissions/" target="_blank"&gt;here&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Authentication Events&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
In order to know if the user granted or denied permission to the app, you need to register a listener of the type &lt;i&gt;&lt;b&gt;AuthenticationListener&lt;/b&gt;&lt;/i&gt;. This interface has three methods:&lt;br /&gt;
&lt;br /&gt;
- &lt;b&gt;onAuthorize&lt;/b&gt;(String token)&lt;br /&gt;
- &lt;b&gt;onAccessDenied&lt;/b&gt;(String message)&lt;br /&gt;
- &lt;b&gt;onFail&lt;/b&gt;(String error, String message)&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;i&gt;onAuthorize&lt;/i&gt;&lt;/b&gt;&lt;i&gt;()&lt;/i&gt; means the user has granted permission to the app along with the &lt;b&gt;Access Token&lt;/b&gt;. Keep this token, since you will use it to sign all your requests to Facebook API. This token works to identify your app. So, from this point on, you can dismiss the login page and start publishing links, comments, etc.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;i&gt;onAccessDenied&lt;/i&gt;&lt;/b&gt;&lt;i&gt;()&lt;/i&gt; means the user has denied access to his Facebook account. It does not mean the user can change his mind later and then authorize your app.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;i&gt;onFail&lt;/i&gt;&lt;/b&gt;&lt;i&gt;()&lt;/i&gt; means that something went wrong during the authentication process. Just try again!&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;...&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;pageWrapper.addAuthenticationListener(this);&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;...&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;br /&gt;
&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;public void onAuthorize(String token) {&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;System.out.println("onAuthorize: " + token);&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;}&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;br /&gt;
&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;public void onAccessDenied(String message) {&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;System.out.println("access_denied: " + message);&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;}&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;br /&gt;
&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;public void onFail(String error, String message) {&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;System.out.println("error: " + error + " message: " + message);&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;}&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;...&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Displaying Login Page&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
The Facebook's Login page will just be requested and displayed, as soon as the method &lt;i&gt;&lt;b&gt;login&lt;/b&gt;()&lt;/i&gt; be called.&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;...&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;pageWrapper.login();&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;...&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Dispatching Requests&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
The API also provides a helper class, called &lt;i&gt;&lt;b&gt;Dispatcher&lt;/b&gt;&lt;/i&gt;, responsible for dispatching the requests, synchronously or asynchronously, to Facebook API. Each &lt;i&gt;Dispatcher&lt;/i&gt; instance must be associated to an access token, so all requests dispatched be signed automatically.&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;...&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;Dispatcher dispatcher = Dispatcher.getInstance("Access Token goes here");&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;...&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Dispatcher Events&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
When you work with asynchronous requests, it is recommended to register a listener in order to know whether they were successfully processed. This listener is defined by &lt;i&gt;&lt;b&gt;DispatcherListener&lt;/b&gt;&lt;/i&gt; interface. This interface has two methods:&lt;br /&gt;
&lt;br /&gt;
- &lt;b&gt;onComplete&lt;/b&gt;(Request request, Response response)&lt;br /&gt;
- &lt;b&gt;onFail&lt;/b&gt;(Request request, Throwable error)&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;i&gt;onComplete&lt;/i&gt;&lt;/b&gt;&lt;i&gt;()&lt;/i&gt; means the request was processed successfully and returns the result (response).&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;i&gt;onFail&lt;/i&gt;&lt;/b&gt;&lt;i&gt;() &lt;/i&gt;means the request failed, returning the cause.&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;...&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;dispatcher.addDispatcherListener(this);&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;...&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;br /&gt;
&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;public void onComplete(Request request, Response response) {&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;...&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;}&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;br /&gt;
&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;public void onFail(Request request, Throwable error) {&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;...&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;}&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;...&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Posting on User's Wall&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
To publish a text on user's wall is pretty simple. Just instantiate an object of &lt;b&gt;&lt;i&gt;Status&lt;/i&gt;&lt;/b&gt; class, informing the text in the constructor. The other constructor allows you to post a text on a friend's wall.&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;...&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;Status status = new Status("Text goes here");&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;dispatcher.dispatch(status); //synchronously&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;br /&gt;
&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;//or dispatcher.addToQueue(status); //asynchronously&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;...&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;br /&gt;
&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;Status status = new Status("Text goes here", "Friend's Id goes here");&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;dispatcher.dispatch(status);&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;...&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Sharing Link&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;
&lt;/b&gt;&lt;br /&gt;
To share a link is as easy as posting on wall. Just instantiate an object of &lt;i&gt;&lt;b&gt;Link&lt;/b&gt;&lt;/i&gt; class, informing the URL in the constructor. The other constructor allows you to define how the link will be displayed.&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;...&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;Link link = new Link("Link's URL goes here");&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;dispatcher.dispatch(link);&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;...&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;Link link =&amp;nbsp;new Link("Link'URL goes here",&amp;nbsp;"Link's Picture Uri goes here",&amp;nbsp;"Link's Name goes here",&amp;nbsp;"Link's Caption goes here",&amp;nbsp;"Link's Description goes here",&amp;nbsp;"Link's Message goes here",&amp;nbsp;"Friend's Id goes here");&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;dispatcher.dispatch(link);&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;...&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Retrieving Friends List&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
To retrieve the user's friends list just instantiate an object of &lt;b&gt;&lt;i&gt;Friends&lt;/i&gt;&lt;/b&gt; class. This request returns an instance of &lt;i&gt;&lt;b&gt;Friends.Response&lt;/b&gt;&lt;/i&gt;, which is &lt;b&gt;&lt;i&gt;Enumeration&lt;/i&gt;&lt;/b&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;...&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;Friends friends = new Friends();&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;Friends.Response friendsEnum = (Friends.Response) dispatcher.dispatch(friends);&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;br /&gt;
&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;while (friendsEnum.hasMoreElements()) {&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;Friends.Response friend  = (Friends.Response)friendsEnum.nextElement();&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;String friendId = friend.getId();&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;String friendName = friend.getName();&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;...&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;}&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;...&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Profile Picture&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
To retrieve a friend's profile picture, create an instance of &lt;b&gt;&lt;i&gt;Picture&lt;/i&gt;&lt;/b&gt; class, informing the friend's Id in the constructor. This request returns an instance of &lt;b&gt;&lt;i&gt;Picture.Response&lt;/i&gt;&lt;/b&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;...&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;Picture picture = new Picture("Friend's Id goes here");&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;Picture.Response pictureResp = (Picture.Response)dispatcher.dispatch(picture);&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;byte[] imageBytes = pictureResp.getData();&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;...&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Revoking Authorization&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Just in case an user decides to remove your app's authorization to access his Facebook account. For that, use the request defined by &lt;i&gt;&lt;b&gt;RevokeAuthorization&lt;/b&gt;&lt;/i&gt; class, informing the access token in the constructor. Once this request is processed, the access token is expired and you app will no longer be able to access the user's account. To access it again, the entire authentication process must be redone.&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;...&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;RevokeAuthorization revoke = new RevokeAuthorization("Access Token goes here");&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;dispatcher.dispatch(revoke);&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;...&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Log out&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
The wrapper class&amp;nbsp;&lt;b&gt;&lt;i&gt;AuthDialogWrapper&lt;/i&gt;&lt;/b&gt; has a method called &lt;b&gt;&lt;i&gt;logout&lt;/i&gt;&lt;/b&gt;&lt;i&gt;()&lt;/i&gt;. Call this method in order to remove any cookie or logged user's data left by Facebook's Login page in our browser component. It is recommend to call this method when the user removes the app's authorization.&lt;br /&gt;
&lt;br /&gt;
It is important to point out that all items presented here are valid for all versions of Facebook API ME. It does matter if you are working on Blackberry, LWUIT or Android. The steps are all the same, except at item 3, regarding the type of subclass. Each platform has its own subclass of&amp;nbsp;&lt;i&gt;AuthDialogWrapper&lt;/i&gt;.&lt;br /&gt;
&lt;br /&gt;
So, I hope this tutorial has been useful for you guys, as well as the API itself.&lt;br /&gt;
&lt;br /&gt;
As soon as the release of the other platforms are released, I will let everybody knwos.&lt;br /&gt;
&lt;br /&gt;
See you in the next post...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5658388309594372146-3960793459718982062?l=j2megroup.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/3hN87Tf4D70Gb_PROMTqA02-Z1g/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/3hN87Tf4D70Gb_PROMTqA02-Z1g/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/3hN87Tf4D70Gb_PROMTqA02-Z1g/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/3hN87Tf4D70Gb_PROMTqA02-Z1g/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/J2meGroup/~4/laT69UYKVIU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://j2megroup.blogspot.com/feeds/3960793459718982062/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5658388309594372146&amp;postID=3960793459718982062&amp;isPopup=true" title="8 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5658388309594372146/posts/default/3960793459718982062?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5658388309594372146/posts/default/3960793459718982062?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/J2meGroup/~3/laT69UYKVIU/facebook-api-me-10-tutorial.html" title="Facebook API ME 1.0: Tutorial" /><author><name>Ernandes Mourão Júnior</name><uri>http://www.blogger.com/profile/05269717786146137246</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="33" height="26" src="http://4.bp.blogspot.com/_mIej7YtLRRM/STwlvtdLMGI/AAAAAAAAAvg/3hmiXcqcfZE/S220/Picture.jpg" /></author><thr:total>8</thr:total><feedburner:origLink>http://j2megroup.blogspot.com/2011/06/facebook-api-me-10-tutorial.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkIDSXs8fSp7ImA9WhZVEUg.&quot;"><id>tag:blogger.com,1999:blog-5658388309594372146.post-405967194767537282</id><published>2011-05-23T09:42:00.000-03:00</published><updated>2011-05-23T09:42:58.575-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-05-23T09:42:58.575-03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="facebook api me" /><category scheme="http://www.blogger.com/atom/ns#" term="blackberry" /><category scheme="http://www.blogger.com/atom/ns#" term="eswt" /><category scheme="http://www.blogger.com/atom/ns#" term="lwuit" /><title>Facebook API ME &amp; HTMLComponent: Not going well.</title><content type="html">Hi, all&lt;br /&gt;
&lt;br /&gt;
Yesterday, I took the day to work on my new project: &lt;b&gt;Facebook API ME&lt;/b&gt;. The development is going well, btw. As I explained in the previous posts, the great challenge of this project is the authentication process, since it requires certain browser integration, which is not a trivial thing considering Java ME.&lt;br /&gt;
&lt;br /&gt;
Anyway, the API is now working properly using &lt;i&gt;Browser&lt;/i&gt; component from &lt;b&gt;eSWT&lt;/b&gt; library. eSWT is available in most Nokia and Sony Ericsson devices. I intend to release it for developers this week. I will let you guys know.&lt;br /&gt;
&lt;br /&gt;
Regarding &lt;b&gt;LWUIT&lt;/b&gt; integration, using &lt;i&gt;HTMLComponent&lt;/i&gt;, the work is not going so well. HTMLComponent is not working well with Facebook's authentication pages. Actually, it works well on login page, where the username/password are informed. On the other hand, the page where the user authorizes the app to access his account is not displayed properly. HTMLComponent is not able to display the "Accept" and "Deny" submit buttons. Because of that, the authentication process is not complete.&lt;br /&gt;
&lt;br /&gt;
I tried to check out LWUIT's latest source code from SVN repository, but it seems they are refactoring the code for some reason. There is an error in one of the classes. Because of that, I was not able to generate a jar file. Is there anybody here that could help with that?&lt;br /&gt;
&lt;br /&gt;
I also intend to work on &lt;b&gt;Blackberry&lt;/b&gt; integration, using &lt;i&gt;BrowserField&lt;/i&gt; component. But as I am not a Blackberry expert, I have to study a little bit to understand how it works so I can work with it.&lt;br /&gt;
&lt;br /&gt;
I let you guys posted.&lt;br /&gt;
&lt;br /&gt;
See you in the next post...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5658388309594372146-405967194767537282?l=j2megroup.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/gGUdEZiyKGCgbFAwX9WpDvhXG_M/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/gGUdEZiyKGCgbFAwX9WpDvhXG_M/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/gGUdEZiyKGCgbFAwX9WpDvhXG_M/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/gGUdEZiyKGCgbFAwX9WpDvhXG_M/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/J2meGroup/~4/QQN9dvsK_rQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://j2megroup.blogspot.com/feeds/405967194767537282/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5658388309594372146&amp;postID=405967194767537282&amp;isPopup=true" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5658388309594372146/posts/default/405967194767537282?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5658388309594372146/posts/default/405967194767537282?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/J2meGroup/~3/QQN9dvsK_rQ/facebook-api-me-htmlcomponent-not-going.html" title="Facebook API ME &amp; HTMLComponent: Not going well." /><author><name>Ernandes Mourão Júnior</name><uri>http://www.blogger.com/profile/05269717786146137246</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="33" height="26" src="http://4.bp.blogspot.com/_mIej7YtLRRM/STwlvtdLMGI/AAAAAAAAAvg/3hmiXcqcfZE/S220/Picture.jpg" /></author><thr:total>3</thr:total><feedburner:origLink>http://j2megroup.blogspot.com/2011/05/facebook-api-me-htmlcomponent-not-going.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0QEQ3ozeSp7ImA9WhZRF0Q.&quot;"><id>tag:blogger.com,1999:blog-5658388309594372146.post-7653718879889921852</id><published>2011-04-14T13:41:00.000-03:00</published><updated>2011-04-14T13:41:42.481-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-14T13:41:42.481-03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="facebook api me" /><category scheme="http://www.blogger.com/atom/ns#" term="api" /><category scheme="http://www.blogger.com/atom/ns#" term="facebook" /><title>Facebook API for Java ME: In the works</title><content type="html">Hi, all&lt;br /&gt;
&lt;br /&gt;
Let's make it different this time. I use to announce my new projects just when they are ready to go, but let's change the paradigm.&lt;br /&gt;
&lt;br /&gt;
Early this week, I checked in to Kenai, the alpha source code of my &lt;a href="http://kenai.com/projects/facebookapime" target="_blank"&gt;&lt;b&gt;Facebook API ME&lt;/b&gt;&lt;/a&gt; project. The name stands for itself, it is API that allows Java ME apps to access &lt;a href="http://www.facebook.com/" target="_blank"&gt;Facebook&lt;/a&gt;. In fact, I had already commented on this project in the last &lt;a href="http://j2megroup.blogspot.com/2011/03/facebook-and-java-me-how-to.html" target="_blank"&gt;post&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
The code is in alpha version, but most features are already done and tested. I am stating it is still as alpha, since I need to retest the authentication feature using &lt;a href="http://www.amazon.com/SWT-Developers-Notebook-Tim-Hatton/dp/0596008384?ie=UTF8&amp;amp;tag=j2grbl-20&amp;amp;link_code=btl&amp;amp;camp=213689&amp;amp;creative=392969" target="_blank"&gt;eSWT&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=j2grbl-20&amp;amp;l=btl&amp;amp;camp=213689&amp;amp;creative=392969&amp;amp;o=1&amp;amp;a=0596008384" style="border: medium none ! important; margin: 0px ! important; padding: 0px ! important;" width="1" /&gt;, besides implementing support to &lt;a href="http://www.amazon.com/LWUIT-1-1-Java-ME-Developers/dp/184719740X?ie=UTF8&amp;amp;tag=j2grbl-20&amp;amp;link_code=btl&amp;amp;camp=213689&amp;amp;creative=392969" target="_blank"&gt;LWUIT&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=j2grbl-20&amp;amp;l=btl&amp;amp;camp=213689&amp;amp;creative=392969&amp;amp;o=1&amp;amp;a=184719740X" style="border: medium none ! important; margin: 0px ! important; padding: 0px ! important;" width="1" /&gt;, by using HTMLComponent.&lt;br /&gt;
&lt;br /&gt;
Currently, besides authentication, Facebook API ME also supports the following features:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Post status&lt;/li&gt;
&lt;li&gt; Share link&lt;/li&gt;
&lt;li&gt;Get list of friends&lt;/li&gt;
&lt;li&gt;Get friend's profile picture&lt;/li&gt;
&lt;/ul&gt;It is not many features, but the way this API is designed, it is a snap to get new ones available.&lt;br /&gt;
&lt;br /&gt;
As soon as I have time, I will complete the tests, so I can officially release the API's version 1.0. The source code is already available for &lt;a href="http://kenai.com/projects/facebookapime/sources" target="_blank"&gt;check out&lt;/a&gt;, just in case you are very curious.&lt;br /&gt;
&lt;br /&gt;
I hope you guys also enjoy this new project.&lt;br /&gt;
&lt;br /&gt;
See you in the next post...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5658388309594372146-7653718879889921852?l=j2megroup.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/_7XjXGpAfl8rfvNQP1UvNhRPub4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/_7XjXGpAfl8rfvNQP1UvNhRPub4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/_7XjXGpAfl8rfvNQP1UvNhRPub4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/_7XjXGpAfl8rfvNQP1UvNhRPub4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/J2meGroup/~4/1b4fuTfwggI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://j2megroup.blogspot.com/feeds/7653718879889921852/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5658388309594372146&amp;postID=7653718879889921852&amp;isPopup=true" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5658388309594372146/posts/default/7653718879889921852?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5658388309594372146/posts/default/7653718879889921852?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/J2meGroup/~3/1b4fuTfwggI/facebook-api-for-java-me-in-works.html" title="Facebook API for Java ME: In the works" /><author><name>Ernandes Mourão Júnior</name><uri>http://www.blogger.com/profile/05269717786146137246</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="33" height="26" src="http://4.bp.blogspot.com/_mIej7YtLRRM/STwlvtdLMGI/AAAAAAAAAvg/3hmiXcqcfZE/S220/Picture.jpg" /></author><thr:total>3</thr:total><feedburner:origLink>http://j2megroup.blogspot.com/2011/04/facebook-api-for-java-me-in-works.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkQNR3kzeyp7ImA9WhZTEkU.&quot;"><id>tag:blogger.com,1999:blog-5658388309594372146.post-866276149179690323</id><published>2011-03-16T09:59:00.000-03:00</published><updated>2011-03-16T09:59:56.783-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-03-16T09:59:56.783-03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="api" /><category scheme="http://www.blogger.com/atom/ns#" term="eswt" /><category scheme="http://www.blogger.com/atom/ns#" term="facebook" /><category scheme="http://www.blogger.com/atom/ns#" term="lwuit" /><title>Facebook and Java ME: How to authenticate?</title><content type="html">Hi all,&lt;br /&gt;
&lt;br /&gt;
Last month, I have developed a tiny API that integrates a Java ME app into Facebook. The implementation was not a big deal, except the authentication process. Since Facebook uses &lt;a href="http://oauth.net/2/" target="_blank"&gt;OAuth 2.0&lt;/a&gt;, it requires that any app that wants to integrate into Facebook's services must authenticate via its web login page. We all know that displaying HTML page in Java ME is not a easy task, since we have no LCDUI component that renders HTML. Fortunately, &lt;span id="goog_1693722695"&gt;&lt;/span&gt;&lt;a href="http://lwuit.java.net/" target="_blank"&gt;LWUIT&lt;span id="goog_1693722696"&gt;&lt;/span&gt;&lt;/a&gt; already provides that via &lt;a href="http://www.nextgenmoco.com/2010/02/mobile-web-and-html-inside-javame-with.html" target="_blank"&gt;HTMLComponent&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
But how to accomplish that if my app is not based on LWUIT? Hard question, huh? In my case, fortunately, the app that I had to integrate into Facebook is based on &lt;a href="http://www.eclipse.org/ercp/" target="_blank"&gt;eSWT&lt;/a&gt;, which provides a Browser component. Because that, I was able to access the Facebook's login page and track the whole process in order to retrieve the token access required to access the methods from Facebook API.&lt;br /&gt;
&lt;br /&gt;
My point in this post is: how to integrate Java ME app into Facebook API without a browser component? What is the trick? Parser the web login page's content and simulate the form submission programmatically? How have you guys have done that?&lt;br /&gt;
&lt;br /&gt;
In intend to release my Facebook API in a near future. So I would like to know a better approach to implement the authentication process, so this API do not get tied to any specific framework.&lt;br /&gt;
&lt;br /&gt;
See you in the next post...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5658388309594372146-866276149179690323?l=j2megroup.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/85CeAW0aBx0QKfLOP76JGBqyUIc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/85CeAW0aBx0QKfLOP76JGBqyUIc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/85CeAW0aBx0QKfLOP76JGBqyUIc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/85CeAW0aBx0QKfLOP76JGBqyUIc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/J2meGroup/~4/HZOSHpTd_Ok" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://j2megroup.blogspot.com/feeds/866276149179690323/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5658388309594372146&amp;postID=866276149179690323&amp;isPopup=true" title="11 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5658388309594372146/posts/default/866276149179690323?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5658388309594372146/posts/default/866276149179690323?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/J2meGroup/~3/HZOSHpTd_Ok/facebook-and-java-me-how-to.html" title="Facebook and Java ME: How to authenticate?" /><author><name>Ernandes Mourão Júnior</name><uri>http://www.blogger.com/profile/05269717786146137246</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="33" height="26" src="http://4.bp.blogspot.com/_mIej7YtLRRM/STwlvtdLMGI/AAAAAAAAAvg/3hmiXcqcfZE/S220/Picture.jpg" /></author><thr:total>11</thr:total><feedburner:origLink>http://j2megroup.blogspot.com/2011/03/facebook-and-java-me-how-to.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0QASHYyfyp7ImA9Wx9aGEs.&quot;"><id>tag:blogger.com,1999:blog-5658388309594372146.post-7278867934401999638</id><published>2011-03-11T14:42:00.000-03:00</published><updated>2011-03-11T14:42:29.897-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-03-11T14:42:29.897-03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="api" /><category scheme="http://www.blogger.com/atom/ns#" term="Google" /><category scheme="http://www.blogger.com/atom/ns#" term="analytics" /><category scheme="http://www.blogger.com/atom/ns#" term="android" /><title>Google Analytics ME 1.2: Android Support</title><content type="html">Hi all,&lt;br /&gt;
&lt;br /&gt;
Today I have released a new version of &lt;b&gt;&lt;a href="http://kenai.com/projects/googleanalyticsme" target="_blank"&gt;Google Analytics ME&lt;/a&gt;&lt;/b&gt; project. This is also a small release that just consists of bug fixes and a new support for &lt;a href="http://www.amazon.com/Samsung-Smartphone-Bluetooth-Screen-International-Warranty/dp/B0049PM9HO?ie=UTF8&amp;amp;tag=j2grbl-20&amp;amp;link_code=btl&amp;amp;camp=213689&amp;amp;creative=392969" target="_blank"&gt;Android&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=j2grbl-20&amp;amp;l=btl&amp;amp;camp=213689&amp;amp;creative=392969&amp;amp;o=1&amp;amp;a=B0049PM9HO" style="border: medium none ! important; margin: 0px ! important; padding: 0px ! important;" width="1" /&gt; 1.5 or newer.&lt;br /&gt;
&lt;br /&gt;
You can download it by clicking &lt;a href="http://kenai.com/projects/googleanalyticsme/downloads"&gt;here&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
See you in the next post...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5658388309594372146-7278867934401999638?l=j2megroup.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/x_dHFqFtFuwJek0ucLKfbh8MqjA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/x_dHFqFtFuwJek0ucLKfbh8MqjA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/x_dHFqFtFuwJek0ucLKfbh8MqjA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/x_dHFqFtFuwJek0ucLKfbh8MqjA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/J2meGroup/~4/As614X_jQSY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://j2megroup.blogspot.com/feeds/7278867934401999638/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5658388309594372146&amp;postID=7278867934401999638&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5658388309594372146/posts/default/7278867934401999638?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5658388309594372146/posts/default/7278867934401999638?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/J2meGroup/~3/As614X_jQSY/google-analytics-me-12-android-support.html" title="Google Analytics ME 1.2: Android Support" /><author><name>Ernandes Mourão Júnior</name><uri>http://www.blogger.com/profile/05269717786146137246</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="33" height="26" src="http://4.bp.blogspot.com/_mIej7YtLRRM/STwlvtdLMGI/AAAAAAAAAvg/3hmiXcqcfZE/S220/Picture.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://j2megroup.blogspot.com/2011/03/google-analytics-me-12-android-support.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkEGRHs6cCp7ImA9Wx9UF00.&quot;"><id>tag:blogger.com,1999:blog-5658388309594372146.post-8203938370803933536</id><published>2011-02-14T15:37:00.000-03:00</published><updated>2011-02-14T15:37:05.518-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-02-14T15:37:05.518-03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="twitter api me" /><category scheme="http://www.blogger.com/atom/ns#" term="twitter" /><title>Twitter API ME 1.6: Finally</title><content type="html">Hi all,&lt;br /&gt;
&lt;br /&gt;
I would like to announce that &lt;b&gt;Twitter API ME 1.6&lt;/b&gt; has just been released. The main features present in this version are:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Retweets to me timeline&lt;/li&gt;
&lt;li&gt;Retweets by me timeline&lt;/li&gt;
&lt;li&gt;Tweets from list timeline&lt;/li&gt;
&lt;li&gt;List management (e.g. create, update, memberships, subscriptions, etc)&lt;/li&gt;
&lt;li&gt;Special character (*) in password bug fix&lt;/li&gt;
&lt;/ul&gt;To download the new version, click &lt;a href="http://kenai.com/projects/twitterapime/downloads/directory/1.6" target="_blank"&gt;here&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
See you in the next post...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5658388309594372146-8203938370803933536?l=j2megroup.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/PhAKylReNYbk2xejg7piGiuJzZ4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/PhAKylReNYbk2xejg7piGiuJzZ4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/PhAKylReNYbk2xejg7piGiuJzZ4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/PhAKylReNYbk2xejg7piGiuJzZ4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/J2meGroup/~4/MO64-pPEd6Y" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://j2megroup.blogspot.com/feeds/8203938370803933536/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5658388309594372146&amp;postID=8203938370803933536&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5658388309594372146/posts/default/8203938370803933536?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5658388309594372146/posts/default/8203938370803933536?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/J2meGroup/~3/MO64-pPEd6Y/twitter-api-me-16-finally.html" title="Twitter API ME 1.6: Finally" /><author><name>Ernandes Mourão Júnior</name><uri>http://www.blogger.com/profile/05269717786146137246</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="33" height="26" src="http://4.bp.blogspot.com/_mIej7YtLRRM/STwlvtdLMGI/AAAAAAAAAvg/3hmiXcqcfZE/S220/Picture.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://j2megroup.blogspot.com/2011/02/twitter-api-me-16-finally.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ck8HSH4-fyp7ImA9Wx9UFE4.&quot;"><id>tag:blogger.com,1999:blog-5658388309594372146.post-5671052814072402249</id><published>2011-02-11T10:27:00.000-03:00</published><updated>2011-02-11T10:27:19.057-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-02-11T10:27:19.057-03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="twitter api me" /><category scheme="http://www.blogger.com/atom/ns#" term="app" /><category scheme="http://www.blogger.com/atom/ns#" term="nokia" /><category scheme="http://www.blogger.com/atom/ns#" term="eswt" /><title>Soundtrckr: Internet Radio with Java ME</title><content type="html">Hi all,&lt;br /&gt;
&lt;br /&gt;
I would like to introduce an interesting app developed with Java ME and &lt;a href="http://wiki.forum.nokia.com/index.php/ESWT" target="_blank"&gt;eSWT&lt;/a&gt;, which is part of the series where Nokia is inviting the coolest app developers to showcase and pilot their apps at &lt;a href="http://betalabs.nokia.com/" target="_blank"&gt;Nokia Beta Labs&lt;/a&gt;. This app is called &lt;b&gt;Soundtrckr&lt;/b&gt;.&lt;br /&gt;
&lt;br /&gt;
Soundtrckr is the first Geosocial Internet radio. It has the largest fully licensed music catalog for Internet radio in the world, plus tons of social and location-based features to help you discover and share music that you can’t find anywhere else. See below some features available on Soundtrckr:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Listen to more than 10 million fully licensed songs&lt;/li&gt;
&lt;li&gt;Create and share personal radio stations&lt;/li&gt;
&lt;li&gt;Play music with friends in real time&lt;/li&gt;
&lt;li&gt;Search your city for popular music and people with similar taste&lt;/li&gt;
&lt;li&gt;Share your favorite stations on social networks&lt;/li&gt;
&lt;/ul&gt;Since it is still in lab, Soundtrckr team is inviting developers to test its beta version in order to receive some &lt;a href="http://betalabs.nokia.com/apps/soundtrckr/forum" target="_blank"&gt;feedbacks&lt;/a&gt; and then improve the app as much as they can. So, if you are interested in being part of this testing process, click &lt;a href="http://betalabs.nokia.com/apps/soundtrckr/download_and_installation" target="_blank"&gt;here&lt;/a&gt; and find out. On the other hand, if you are just interested in enjoying all features by Soundtrckr, you can download it directly from &lt;a href="http://store.ovi.com/content/67367" target="_blank"&gt;Ovi Store&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Soundtrckr is available for Nokia N8 and other Symbian S^3 devices as well as S60 5th edition devices. Regarding S60, the version on beta labs requires JRT 2.1 and the Ovi's one, 1.4.&lt;br /&gt;
&lt;br /&gt;
For further information Soundtrckr, access the app's &lt;a href="http://betalabs.nokia.com/apps/soundtrckr" target="_blank"&gt;page&lt;/a&gt; at Nokia Beta Labs.&lt;br /&gt;
&lt;br /&gt;
Before I forget, Soundtrckr works with &lt;a href="http://kenai.com/projects/twitterapime/" target="_blank"&gt;Twitter API ME&lt;/a&gt; in order to implement the functionalities related to Twitter. Cool, huh?&lt;br /&gt;
&lt;br /&gt;
See you in the next post...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5658388309594372146-5671052814072402249?l=j2megroup.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/YDVeWMfpHW7Ggs2aeL0iRMgTlSw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/YDVeWMfpHW7Ggs2aeL0iRMgTlSw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/YDVeWMfpHW7Ggs2aeL0iRMgTlSw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/YDVeWMfpHW7Ggs2aeL0iRMgTlSw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/J2meGroup/~4/AKJH6KADYvE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://j2megroup.blogspot.com/feeds/5671052814072402249/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5658388309594372146&amp;postID=5671052814072402249&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5658388309594372146/posts/default/5671052814072402249?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5658388309594372146/posts/default/5671052814072402249?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/J2meGroup/~3/AKJH6KADYvE/soundtrckr-internet-radio-with-java-me.html" title="Soundtrckr: Internet Radio with Java ME" /><author><name>Ernandes Mourão Júnior</name><uri>http://www.blogger.com/profile/05269717786146137246</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="33" height="26" src="http://4.bp.blogspot.com/_mIej7YtLRRM/STwlvtdLMGI/AAAAAAAAAvg/3hmiXcqcfZE/S220/Picture.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://j2megroup.blogspot.com/2011/02/soundtrckr-internet-radio-with-java-me.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkIHRn44eip7ImA9Wx9XGUg.&quot;"><id>tag:blogger.com,1999:blog-5658388309594372146.post-1863416282941968100</id><published>2011-01-13T18:35:00.000-03:00</published><updated>2011-01-13T18:35:37.032-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-01-13T18:35:37.032-03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="api" /><category scheme="http://www.blogger.com/atom/ns#" term="Google" /><category scheme="http://www.blogger.com/atom/ns#" term="analytics" /><title>Google Analytics ME 1.1: Just a patch</title><content type="html">Hi all,&lt;br /&gt;
&lt;br /&gt;
I have just released&amp;nbsp;&lt;b&gt;Google Analytics ME 1.1&lt;/b&gt;, which consists of small bug fix related to visitor identification. In the first version, the visitors were not being tracked properly. In fact, every tracking was recording as from the same visitor. Now it is fixed! However, the API is not able to track unique visitors yet. Actually, a new visitor identification is created at each new app session started. In other words, if you restart your app and track anything to Google Analytics, a new visitor will be counted.&lt;br /&gt;
&lt;br /&gt;
I hope to provide unique visitors feature in the next versions. Stay tuned!&lt;br /&gt;
&lt;br /&gt;
To download the new version, click &lt;a href="http://kenai.com/projects/googleanalyticsme/downloads" target="_blank"&gt;here&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
See you in the next post...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5658388309594372146-1863416282941968100?l=j2megroup.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/N_ZH9q2ncmjzAoiNAnZd_GGafmo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/N_ZH9q2ncmjzAoiNAnZd_GGafmo/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/N_ZH9q2ncmjzAoiNAnZd_GGafmo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/N_ZH9q2ncmjzAoiNAnZd_GGafmo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/J2meGroup/~4/fh6caTmit28" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://j2megroup.blogspot.com/feeds/1863416282941968100/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5658388309594372146&amp;postID=1863416282941968100&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5658388309594372146/posts/default/1863416282941968100?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5658388309594372146/posts/default/1863416282941968100?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/J2meGroup/~3/fh6caTmit28/google-analytics-me-11-just-patch.html" title="Google Analytics ME 1.1: Just a patch" /><author><name>Ernandes Mourão Júnior</name><uri>http://www.blogger.com/profile/05269717786146137246</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="33" height="26" src="http://4.bp.blogspot.com/_mIej7YtLRRM/STwlvtdLMGI/AAAAAAAAAvg/3hmiXcqcfZE/S220/Picture.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://j2megroup.blogspot.com/2011/01/google-analytics-me-11-just-patch.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0cMR3o7eip7ImA9Wx9QFEQ.&quot;"><id>tag:blogger.com,1999:blog-5658388309594372146.post-1118965208579597321</id><published>2010-12-27T20:04:00.000-03:00</published><updated>2010-12-27T20:04:46.402-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-12-27T20:04:46.402-03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="api" /><category scheme="http://www.blogger.com/atom/ns#" term="Google" /><category scheme="http://www.blogger.com/atom/ns#" term="analytics" /><title>Tracking Java ME Apps with Google Analytics</title><content type="html">Hi all,&lt;br /&gt;
&lt;br /&gt;
Today I would like to announce another project of mine, which I believe it will be very helpful for most Java ME developers. This new project is called&amp;nbsp; &lt;b&gt;Google Analytics ME&lt;/b&gt;.&lt;br /&gt;
&lt;br /&gt;
This micro Java API allows developers to track their &lt;a href="http://www.amazon.com/Beginning-trade-Platform-Novice-Professional/dp/1430210613?ie=UTF8&amp;amp;tag=j2grbl-20&amp;amp;link_code=btl&amp;amp;camp=213689&amp;amp;creative=392969" target="_blank"&gt;Java ME&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=j2grbl-20&amp;amp;l=btl&amp;amp;camp=213689&amp;amp;creative=392969&amp;amp;o=1&amp;amp;a=1430210613" style="border: none !important; margin: 0px !important; padding: 0px !important;" width="1" /&gt; apps using&amp;nbsp; &lt;a href="http://www.google.com/analytics" target="_blank"&gt;Google Analytics&lt;/a&gt;. Developers will be able to analyze how the users are using their apps, using this Google's powerful tool, just like they are used to do with their websites.&lt;br /&gt;
&lt;br /&gt;
To work with Google Analytics ME is as easy as it is to install that piece of &lt;a href="http://www.amazon.com/JavaScript-Definitive-Guide-David-Flanagan/dp/0596101996?ie=UTF8&amp;amp;tag=j2grbl-20&amp;amp;link_code=btl&amp;amp;camp=213689&amp;amp;creative=392969" target="_blank"&gt;JavaScript&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=j2grbl-20&amp;amp;l=btl&amp;amp;camp=213689&amp;amp;creative=392969&amp;amp;o=1&amp;amp;a=0596101996" style="border: none !important; margin: 0px !important; padding: 0px !important;" width="1" /&gt; code provided by Google, in order to start tracking your websites. The only requirement of Google Analytics ME is a tracking code (e.g. UA-1736743-0), which you get as soon as you register an account for your website (app) on &lt;a href="http://www.amazon.com/Advanced-Web-Metrics-Google-Analytics/dp/0470562315?ie=UTF8&amp;amp;tag=j2grbl-20&amp;amp;link_code=btl&amp;amp;camp=213689&amp;amp;creative=392969" target="_blank"&gt;Google Analytics&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=j2grbl-20&amp;amp;l=btl&amp;amp;camp=213689&amp;amp;creative=392969&amp;amp;o=1&amp;amp;a=0470562315" style="border: none !important; margin: 0px !important; padding: 0px !important;" width="1" /&gt;.&lt;br /&gt;
&lt;br /&gt;
Once you have your tracking code, all you need is to specify which points of your app will be tracked by the API.&lt;br /&gt;
&lt;br /&gt;
Google Analytics ME is capable of working with two types of events provided by Google Analytics: &lt;b&gt;Page View&lt;/b&gt; and &lt;b&gt;Event Tracking&lt;/b&gt;.&lt;br /&gt;
&lt;br /&gt;
A &lt;b&gt;Page View&lt;/b&gt; is an event that represents a page (or screen) that was viewed by a user. For instance, you may use this event to check how many times your app was started up, by tracking the MIDlet's constructor. See below how to implement it:&lt;br /&gt;
&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;public AppMIDlet() {&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ...&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Tracker tracker = Tracker.getInstance("UA-1736743-0");&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; tracker.addToQueue(new PageView("/app_started"));&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ...&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;
In a similar way, you can also track how many times each app's screen is viewed by users, just using another unique id for each one. For instance:&lt;br /&gt;
&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;public MainMenu() {&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; super("Media Player")&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ...&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Tracker tracker = Tracker.getInstance("UA-1736743-0");&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; tracker.addToQueue(new PageView("/media_player"));&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ...&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;
An &lt;b&gt;Event&lt;/b&gt; Tracking may be used to track events that occur in a screen, e.g., a button click or the usage of a given feature. For instance, considering your app is a media player, you can track how many times or how long a given song is played.&lt;br /&gt;
&lt;br /&gt;
An event is composed of four information: &lt;b&gt;Category&lt;/b&gt;, &lt;b&gt;Action&lt;/b&gt;, &lt;b&gt;Label&lt;/b&gt; and &lt;b&gt;Value&lt;/b&gt;. A &lt;b&gt;Category&lt;/b&gt; only works to group actions. For instance, a Category could be a screen's title, which you intend to track its events. The &lt;b&gt;Action&lt;/b&gt;, considering a media player, would be the events of playing or stopping a song. In addition, for each Action, a &lt;b&gt;Label&lt;/b&gt; may also be specified. In this case, you could use a Label to indicate the song's name being played.&lt;br /&gt;
&lt;br /&gt;
Specifying up to these three parameters, Google Analytics will count how many times they were tracked. On the other hand, when you specify the &lt;b&gt;Value&lt;/b&gt;, which is a integer, Google Analytics will also sum all values that were tracked for a given Category, Action and Label.&lt;br /&gt;
&lt;br /&gt;
This way, we can track, for instance, for how long a given song was played, because Google Analytics will display a sum of all values.&lt;br /&gt;
&lt;br /&gt;
See below how to work with events:&lt;br /&gt;
&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;public void play(String media) {&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Tracker tracker = Tracker.getInstance("UA-1736743-0");&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; tracker.addToQueue(new Event("/media_player", "Play", media, null));&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ...&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;public void stop(String media) {&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Tracker tracker = Tracker.getInstance("UA-1736743-0");&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; tracker.addToQueue(new Event("/media_player", "Stop", media, timePlayed));&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ...&lt;/span&gt;&lt;/div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace; font-size: small;"&gt;}&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
It is important to point out that only Category and Action are required. For further information on event tracking, click &lt;a href="http://code.google.com/apis/analytics/docs/tracking/eventTrackerGuide.html" target="_blank"&gt;here&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
You may be wondering why the events are being added to a queue. It is because the Tracker class can work synchronously and asynchronously.&amp;nbsp;All queued events are flushed automatically by an internal background process that runs within a fixed-delay strategy. In addition, to work synchronously, you can use the method &lt;span style="font-size: small;"&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;Tracker.track(Request)&lt;/span&gt;&lt;/span&gt;, which immediately sends the event to Google Analytics.&lt;br /&gt;
&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;...&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;Tracker tracker = Tracker.getInstance("UA-1736743-0");&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;tracker.track(new Event("/media_player", "Rewind", null, null));&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;...&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;
You can also adjust the interval between each flush operation, by using the method &lt;span style="font-family: 'Courier New', Courier, monospace; font-size: small;"&gt;Tracker.getIntance(String, long)&lt;/span&gt;. In addition, the queue can be explicitly flushed through the method &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;Tracker.flush(boolean)&lt;/span&gt;.&lt;br /&gt;
&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;...&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;Tracker tracker = Tracker.getInstance("UA-1736743-0", 120);&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;...&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;
The code above specifies that background process runs at each 120 seconds. It is also important to point out that there is only one Tracker object per tracking code, since it uses the &lt;a href="http://en.wikipedia.org/wiki/Singleton_pattern" target="_blank"&gt;Singleton pattern&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
As usual regarding my projects, this one is also available on &lt;a href="http://kenai.com/projects/googleanalyticsme" target="_blank"&gt;Kenai.com&lt;/a&gt; and can be downloaded &lt;a href="http://kenai.com/projects/googleanalyticsme/downloads/download/googleanalytics-me-1.0-javame.zip" target="_blank"&gt;here&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
I hope you guys enjoy it.&lt;br /&gt;
&lt;br /&gt;
Happy new year!&lt;br /&gt;
&lt;br /&gt;
See you in the next post...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5658388309594372146-1118965208579597321?l=j2megroup.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/duni5WRvEiWskydgFokiwTk9u9I/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/duni5WRvEiWskydgFokiwTk9u9I/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/duni5WRvEiWskydgFokiwTk9u9I/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/duni5WRvEiWskydgFokiwTk9u9I/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/J2meGroup/~4/pFLtB_zUvqI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://j2megroup.blogspot.com/feeds/1118965208579597321/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5658388309594372146&amp;postID=1118965208579597321&amp;isPopup=true" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5658388309594372146/posts/default/1118965208579597321?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5658388309594372146/posts/default/1118965208579597321?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/J2meGroup/~3/pFLtB_zUvqI/tracking-java-me-apps-with-google.html" title="Tracking Java ME Apps with Google Analytics" /><author><name>Ernandes Mourão Júnior</name><uri>http://www.blogger.com/profile/05269717786146137246</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="33" height="26" src="http://4.bp.blogspot.com/_mIej7YtLRRM/STwlvtdLMGI/AAAAAAAAAvg/3hmiXcqcfZE/S220/Picture.jpg" /></author><thr:total>2</thr:total><feedburner:origLink>http://j2megroup.blogspot.com/2010/12/tracking-java-me-apps-with-google.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEYER3o7fyp7ImA9Wx9REkU.&quot;"><id>tag:blogger.com,1999:blog-5658388309594372146.post-532829014578983738</id><published>2010-12-13T21:21:00.000-03:00</published><updated>2010-12-13T21:21:46.407-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-12-13T21:21:46.407-03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="lib adme ad" /><title>AdME: Ad Library for Java ME</title><content type="html">Hi all,&lt;br /&gt;
&lt;br /&gt;
I hereby to announce another open source project of mine, called &lt;b&gt;AdME&lt;/b&gt;. The idea behind this project is to provide a standardized way to access Ad Networks from Java ME apps. Designed to be extensible, AdME is prepared to support any Ad Network. For each network supported, a connector component must be build in order to handle the Ad retrieval. This work is done following a standard interface defined by the library.&lt;br /&gt;
&lt;br /&gt;
In this version 1.0, AdME provides support for &lt;a href="http://www.inner-active.com/" target="_blank"&gt;Inner-active&lt;/a&gt; Ad Network. It is a very good service that provides a rich set of Ads for Java-ME based devices, besides other popular platforms. Currently, I am working with them for two appa of mine. So far, so good! All you need to do to work with them is to fill out a form and register and your app. In a couple of hours, a person on behalf of Inner-active will get in touch with you, in order to provide your username, password and Application ID. You will use this ID in order to connect your app with Inner-active.&lt;br /&gt;
&lt;br /&gt;
The AdME library is already available on &lt;a href="http://kenai.com/projects/adme" target="_blank"&gt;Kenai.com/adme&lt;/a&gt;. There, besides the library, you will also find a sample app that demonstrates how to work with AdME. Due to lack of time, I was not able to publish a project's wiki with more details yet. However, the library is very straightforward and I believe you will not have any problem to get it working, by reading the Javadoc and/or analyzing the app's source code.&lt;br /&gt;
&lt;br /&gt;
I hope to get more Ad Networks connectors implemented as soon as possible. If you know a good network with Ads for Java ME devices, please let me know.&lt;br /&gt;
&lt;br /&gt;
I hope you like it!&lt;br /&gt;
&lt;br /&gt;
See you in the next post...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5658388309594372146-532829014578983738?l=j2megroup.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/dUzFJTJ-wLl9ZujPiUXE2CZNdOw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/dUzFJTJ-wLl9ZujPiUXE2CZNdOw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/dUzFJTJ-wLl9ZujPiUXE2CZNdOw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/dUzFJTJ-wLl9ZujPiUXE2CZNdOw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/J2meGroup/~4/rsvl_rczou8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://j2megroup.blogspot.com/feeds/532829014578983738/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5658388309594372146&amp;postID=532829014578983738&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5658388309594372146/posts/default/532829014578983738?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5658388309594372146/posts/default/532829014578983738?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/J2meGroup/~3/rsvl_rczou8/adme-ad-library-for-java-me.html" title="AdME: Ad Library for Java ME" /><author><name>Ernandes Mourão Júnior</name><uri>http://www.blogger.com/profile/05269717786146137246</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="33" height="26" src="http://4.bp.blogspot.com/_mIej7YtLRRM/STwlvtdLMGI/AAAAAAAAAvg/3hmiXcqcfZE/S220/Picture.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://j2megroup.blogspot.com/2010/12/adme-ad-library-for-java-me.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0YMQ3Y_eip7ImA9Wx5bFU4.&quot;"><id>tag:blogger.com,1999:blog-5658388309594372146.post-5450240901146843201</id><published>2010-10-31T10:19:00.000-03:00</published><updated>2010-10-31T10:19:42.842-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-10-31T10:19:42.842-03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="twitter api me" /><category scheme="http://www.blogger.com/atom/ns#" term="twitter" /><title>Twitter API ME 1.5</title><content type="html">Hi all,&lt;br /&gt;
&lt;br /&gt;
Quick post just to announce that &lt;b&gt;Twitter API ME 1.5&lt;/b&gt; has just been released.&lt;br /&gt;
&lt;br /&gt;
In this new version, the following new features are available:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;List of pending friends/followers request&lt;/li&gt;
&lt;li&gt;Report spam&lt;/li&gt;
&lt;li&gt;Retweets of me timeline&lt;/li&gt;
&lt;li&gt;Trend Topics search&lt;/li&gt;
&lt;li&gt;Tweet's entities&lt;/li&gt;
&lt;li&gt;Retrieval of access token from UserAccountManager class&lt;/li&gt;
&lt;/ul&gt;For further information on this new release, access &lt;a href="http://www.twitterapime.com/" target="_blank"&gt;www.twitterapime.com&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
See you in the next post...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5658388309594372146-5450240901146843201?l=j2megroup.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/DLkEAclIZxWSnJosc1gICIChcMk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/DLkEAclIZxWSnJosc1gICIChcMk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/DLkEAclIZxWSnJosc1gICIChcMk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/DLkEAclIZxWSnJosc1gICIChcMk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/J2meGroup/~4/ImIXhfc9k1U" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://j2megroup.blogspot.com/feeds/5450240901146843201/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5658388309594372146&amp;postID=5450240901146843201&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5658388309594372146/posts/default/5450240901146843201?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5658388309594372146/posts/default/5450240901146843201?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/J2meGroup/~3/ImIXhfc9k1U/twitter-api-me-15.html" title="Twitter API ME 1.5" /><author><name>Ernandes Mourão Júnior</name><uri>http://www.blogger.com/profile/05269717786146137246</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="33" height="26" src="http://4.bp.blogspot.com/_mIej7YtLRRM/STwlvtdLMGI/AAAAAAAAAvg/3hmiXcqcfZE/S220/Picture.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://j2megroup.blogspot.com/2010/10/twitter-api-me-15.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEUHQ308eCp7ImA9Wx5UF0s.&quot;"><id>tag:blogger.com,1999:blog-5658388309594372146.post-1559385326358957081</id><published>2010-10-22T13:50:00.000-03:00</published><updated>2010-10-22T13:50:32.370-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-10-22T13:50:32.370-03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="JCP" /><category scheme="http://www.blogger.com/atom/ns#" term="lwuit" /><category scheme="http://www.blogger.com/atom/ns#" term="iphone" /><category scheme="http://www.blogger.com/atom/ns#" term="android" /><title>JPhone and JOS: It could work</title><content type="html">Hi all,&lt;br /&gt;
&lt;br /&gt;
Since iOS and Android came out as two big waves flooding the entire mobile world, leveraged by Apple and Google (and its partners) and their incredible devices, developers have wondered what is going to be the future of other mobile platforms. In our case, Java ME.&lt;br /&gt;
&lt;br /&gt;
There are a lot of discussions in the internet about this topic. Actually, I have already exposed my &lt;a href="http://j2megroup.blogspot.com/2010/03/java-me-against-giants-unfair-fight.html" target="_blank"&gt;point of view&lt;/a&gt; on this matter. However, I am not here today to extend this discussion. In fact, I would like to demonstrate how Java ME could be at a better place.&lt;br /&gt;
&lt;br /&gt;
In my opinion, one of the greatest advantage of &lt;a href="http://www.amazon.com/Beginning-iOS-4-Application-Development/dp/0470918020?ie=UTF8&amp;amp;tag=j2grbl-20&amp;amp;link_code=btl&amp;amp;camp=213689&amp;amp;creative=392969" target="_blank"&gt;iOS&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=j2grbl-20&amp;amp;l=btl&amp;amp;camp=213689&amp;amp;creative=392969&amp;amp;o=1&amp;amp;a=0470918020" style="border: medium none ! important; margin: 0px ! important; padding: 0px ! important;" width="1" /&gt; and &lt;a href="http://www.amazon.com/Pro-Android-2-Sayed-Hashimi/dp/1430226595?ie=UTF8&amp;amp;tag=j2grbl-20&amp;amp;link_code=btl&amp;amp;camp=213689&amp;amp;creative=392969" target="_blank"&gt;Android&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=j2grbl-20&amp;amp;l=btl&amp;amp;camp=213689&amp;amp;creative=392969&amp;amp;o=1&amp;amp;a=1430226595" style="border: medium none ! important; margin: 0px ! important; padding: 0px ! important;" width="1" /&gt; platforms have compared to Java ME is a rich and uniform base. Who develops for either one knows that there is a bunch of APIs that allow us to build very compelling apps. In addition, those APIs will always be there. So developers do not have to worry about fragmentation.&lt;br /&gt;
&lt;br /&gt;
In any event, we know that Java ME has a different concept, which is to provide a base platform aimed to run on low, mid and high-end devices. Because this difference of hardware, not all JSRs specified  by JCP are available on any Java ME-enabled device.&lt;br /&gt;
&lt;br /&gt;
Since the existent set of specified JSRs, I believe that Java ME could be at a better place. Java ME has a very rich set of JSRs at JCP that could also provide a very rich and uniform base for Java ME devices. If we had a manufacturer interested on implementing all of them in a single device, I believe Java ME developers would not be so afraid. Sony Ericsson and Nokia have done a good work on providing devices with a very good set of APIs. However, it is not enough to compete with the other players.&lt;br /&gt;
&lt;br /&gt;
So, let's imagine such device. Let's call it &lt;b&gt;JPhone&lt;/b&gt;, running &lt;b&gt;JOS&lt;/b&gt;. Now, let's outline some JSRs that could be present on it.&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://jcp.org/en/jsr/detail?id=139" target="_blank"&gt;JSR 139: Connected Limited Device Configuration 1.1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://jcp.org/en/jsr/detail?id=271" target="_blank"&gt;JSR 271: Mobile Information Device Profile 3.0&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://jcp.org/en/jsr/detail?id=75" target="_blank"&gt;JSR 75: PDA Optional Packages (PIM and File System)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://jcp.org/en/jsr/detail?id=80" target="_blank"&gt;JSR 80: Java USB API&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://jcp.org/en/jsr/detail?id=82" target="_blank"&gt;JSR 82: Java APIs for Bluetooth &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://jcp.org/en/jsr/detail?id=113" target="_blank"&gt;JSR 113: Java Speech API&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://jcp.org/en/jsr/detail?id=205" target="_blank"&gt;JSR 205: Wireless Messaging API 2.0&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://jcp.org/en/jsr/detail?id=135" target="_blank"&gt;JSR 135: Mobile Media API&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://jcp.org/en/jsr/detail?id=172" target="_blank"&gt;JSR 172: Web Services Specification&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://jcp.org/en/jsr/detail?id=177" target="_blank"&gt;JSR 177: Security and Trust Services API&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://jcp.org/en/jsr/detail?id=293" target="_blank"&gt;JSR 293: Location API 2.0&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://jcp.org/en/jsr/detail?id=180" target="_blank"&gt;JSR 180: SIP API&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://jcp.org/en/jsr/detail?id=184" target="_blank"&gt;JSR 184: Mobile 3D Graphics API &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://jcp.org/en/jsr/detail?id=190" target="_blank"&gt;JSR 190: Event Tracking API&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://jcp.org/en/jsr/detail?id=211" target="_blank"&gt;JSR 211: Content Handler API&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://jcp.org/en/jsr/detail?id=287" target="_blank"&gt;JSR 287: Scalable 2D Vector Graphics API 2.0&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://jcp.org/en/jsr/detail?id=229" target="_blank"&gt;JSR 229: Payment API&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://jcp.org/en/jsr/detail?id=234" target="_blank"&gt;JSR 234: Advanced Multimedia Supplements&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://jcp.org/en/jsr/detail?id=238" target="_blank"&gt;JSR 238: Mobile Internationalization API&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://jcp.org/en/jsr/detail?id=239" target="_blank"&gt;JSR 239: Binding for the OpenGL ES API&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://jcp.org/en/jsr/detail?id=253" target="_blank"&gt;JSR 253: Mobile Telephone API&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://jcp.org/en/jsr/detail?id=256" target="_blank"&gt;JSR 256: Mobile Sensor API&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://jcp.org/en/jsr/detail?id=257" target="_blank"&gt;JSR 257: Contactless Communication API&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://jcp.org/en/jsr/detail?id=258" target="_blank"&gt;JSR 258: Mobile User Interface Customization API&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://jcp.org/en/jsr/detail?id=272" target="_blank"&gt;JSR 272: Mobile Broadcast Service API for Handheld Terminals&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://jcp.org/en/jsr/detail?id=280" target="_blank"&gt;JSR 280: XML API&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://jcp.org/en/jsr/detail?id=281" target="_blank"&gt;JSR 281: IMS Services API&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://jcp.org/en/jsr/detail?id=300" target="_blank"&gt;JSR 300: DRM API&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;A lot of stuff, huh? And here I am just considering JSRs that at least are compatible with CLDC and at final release stage. There are a bunch of other ones in JCP, but they are either CDC compliant, rejected or stuck. I am assuming that once a JSR reaches final release stage, it is feasible to be implemented. So it would be ready to go on JPhone.&lt;br /&gt;
&lt;br /&gt;
I would also add &lt;a href="https://lwuit.dev.java.net/" target="_blank"&gt;LWUIT&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=j2grbl-20&amp;amp;l=btl&amp;amp;camp=213689&amp;amp;creative=392969&amp;amp;o=1&amp;amp;a=184719740X" style="border: medium none ! important; margin: 0px ! important; padding: 0px ! important;" width="1" /&gt;&lt;/a&gt; to this list. I believe that all efforts put on LWUIT, since ORACLE (that time Sun) embraced it, have come this project to a higher level of maturity and capabilities. Today, we have seen great things being developed with it. At Java One, there were many presentations regarding &lt;a href="http://www.amazon.com/LWUIT-1-1-Java-ME-Developers/dp/184719740X?ie=UTF8&amp;amp;tag=j2grbl-20&amp;amp;link_code=btl&amp;amp;camp=213689&amp;amp;creative=392969" target="_blank"&gt;LWUIT&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=j2grbl-20&amp;amp;l=btl&amp;amp;camp=213689&amp;amp;creative=392969&amp;amp;o=1&amp;amp;a=184719740X" style="border: medium none ! important; margin: 0px ! important; padding: 0px ! important;" width="1" /&gt; being capable to build very compelling smartphone apps.&lt;br /&gt;
&lt;br /&gt;
This my list is close to what is proposed by &lt;a href="http://jcp.org/en/jsr/detail?id=248" target="_blank"&gt;MSA&lt;/a&gt;. However, I would like to see no optionality, i.e., MSA subset or even hardware dependency.&lt;br /&gt;
&lt;br /&gt;
We can't forget about the Java language itself. Today we are stuck in Java 1.3 language. On the other hand, there are some great new features, e.g., generics, enumerations, auto boxing, etc, in &lt;a href="http://www.amazon.com/Java-Concepts-5-6/dp/0470105550?ie=UTF8&amp;amp;tag=j2grbl-20&amp;amp;link_code=btl&amp;amp;camp=213689&amp;amp;creative=392969" target="_blank"&gt;Java 5&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=j2grbl-20&amp;amp;l=btl&amp;amp;camp=213689&amp;amp;creative=392969&amp;amp;o=1&amp;amp;a=0470105550" style="border: medium none ! important; margin: 0px ! important; padding: 0px ! important;" width="1" /&gt;, which most developers can no longer live without.&lt;br /&gt;
&lt;br /&gt;
Java has many more things to offer and that could be present on JPhone, e.g., collections, network, I/O, etc. Considering the hardware that runs iOS and Android, full Java SE 6 could run properly on it too.&lt;br /&gt;
&lt;br /&gt;
Another leak of Java ME is related to an application model. iOS and Android have theirs, which are based on &lt;a href="http://en.wikipedia.org/wiki/Model%E2%80%93View%E2%80%93Controller" target="_blank"&gt;Model-View-Controller&lt;/a&gt; pattern. On the other hand, Java ME let this task on developers' hands. Java ME needs to provide more references for them.&lt;br /&gt;
&lt;br /&gt;
Java ME also leaks providing a better solution for data storage. Record Store is not enough at all. On the other hand, iOS and Android provide their SQLite implementations. It is time for ORACLE to start thinking of using its huge background on it to help Java ME.&lt;br /&gt;
&lt;br /&gt;
I know that my proposal is kind of surreal, but it seams to be a receipt for success of iOS and Android. Windows Phone 7 tends to follow it letter by letter.&lt;br /&gt;
&lt;br /&gt;
See you in the next post...&lt;br /&gt;
&lt;ul&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5658388309594372146-1559385326358957081?l=j2megroup.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/g2IgD98mgTVTHD5LEqZSkP5QqpQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/g2IgD98mgTVTHD5LEqZSkP5QqpQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/g2IgD98mgTVTHD5LEqZSkP5QqpQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/g2IgD98mgTVTHD5LEqZSkP5QqpQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/J2meGroup/~4/HTevxJJfToU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://j2megroup.blogspot.com/feeds/1559385326358957081/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5658388309594372146&amp;postID=1559385326358957081&amp;isPopup=true" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5658388309594372146/posts/default/1559385326358957081?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5658388309594372146/posts/default/1559385326358957081?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/J2meGroup/~3/HTevxJJfToU/jphone-and-jos-it-could-work.html" title="JPhone and JOS: It could work" /><author><name>Ernandes Mourão Júnior</name><uri>http://www.blogger.com/profile/05269717786146137246</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="33" height="26" src="http://4.bp.blogspot.com/_mIej7YtLRRM/STwlvtdLMGI/AAAAAAAAAvg/3hmiXcqcfZE/S220/Picture.jpg" /></author><thr:total>2</thr:total><feedburner:origLink>http://j2megroup.blogspot.com/2010/10/jphone-and-jos-it-could-work.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DU8MQHc-fCp7ImA9Wx5UF0k.&quot;"><id>tag:blogger.com,1999:blog-5658388309594372146.post-377809705913318746</id><published>2010-10-22T08:44:00.000-03:00</published><updated>2010-10-22T08:44:41.954-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-10-22T08:44:41.954-03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="article" /><title>Improving your App Quality</title><content type="html">Hi all,&lt;br /&gt;
&lt;br /&gt;
Check this interesting &lt;a href="http://android-developers.blogspot.com/2010/10/improving-app-quality.html" target="_blank"&gt;post&lt;/a&gt; that I just read on Android's blog. It describes important points about how to improve app quality. In some points, the writer speaks about specific things of Android platform. However, the general idea is worth for any app, regardless platform.&lt;br /&gt;
&lt;br /&gt;
See you in the next post...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5658388309594372146-377809705913318746?l=j2megroup.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Kg8yh_BtO0qEq4bIpT8PzvDvFSc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Kg8yh_BtO0qEq4bIpT8PzvDvFSc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Kg8yh_BtO0qEq4bIpT8PzvDvFSc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Kg8yh_BtO0qEq4bIpT8PzvDvFSc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/J2meGroup/~4/36ntPyMrsTI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://j2megroup.blogspot.com/feeds/377809705913318746/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5658388309594372146&amp;postID=377809705913318746&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5658388309594372146/posts/default/377809705913318746?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5658388309594372146/posts/default/377809705913318746?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/J2meGroup/~3/36ntPyMrsTI/improving-your-app-quality.html" title="Improving your App Quality" /><author><name>Ernandes Mourão Júnior</name><uri>http://www.blogger.com/profile/05269717786146137246</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="33" height="26" src="http://4.bp.blogspot.com/_mIej7YtLRRM/STwlvtdLMGI/AAAAAAAAAvg/3hmiXcqcfZE/S220/Picture.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://j2megroup.blogspot.com/2010/10/improving-your-app-quality.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEMARH0zeSp7ImA9Wx5UE08.&quot;"><id>tag:blogger.com,1999:blog-5658388309594372146.post-5482192697319080972</id><published>2010-10-17T10:30:00.001-03:00</published><updated>2010-10-17T10:34:05.381-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-10-17T10:34:05.381-03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="twitter api me" /><category scheme="http://www.blogger.com/atom/ns#" term="javaone" /><category scheme="http://www.blogger.com/atom/ns#" term="lwuit" /><title>Beyond Smartphones: Rich Applications and Services for the Mobile Masses</title><content type="html">Hi all,&lt;br /&gt;
&lt;br /&gt;
I would like to share you this presentation by &lt;a href="http://terrencebarr.wordpress.com/" target="_blank"&gt;Terrence Barr&lt;/a&gt; (@terrencebarr), at JavaOne 2010. Terrence introduces some tools that allow us to build rich and compelling smartphone-like applications. To demonstrate how to put all this technologies together, he develops a very interesting social networking mash-up app.&lt;br /&gt;
&lt;br /&gt;
Terrence points out three technologies in his presentation:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="https://lwuit.dev.java.net/" target="_blank"&gt;LWUIT&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://meapplicationdevelopers.dev.java.net/mobileajax.html" target="_blank"&gt;Mobile AJAX for Java ME&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.twitterapime.com/" target="_blank"&gt;Twitter API ME&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;To access the presentation, click &lt;a href="http://cl.ly/39d776f8aa5a181a3ede" target="_blank"&gt;here&lt;/a&gt;. It is a short one, but its content is valuable and really worths a view.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;See you in the next post...&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5658388309594372146-5482192697319080972?l=j2megroup.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/bYAk_tzaV5Y2pPtggHktf0dt_TQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/bYAk_tzaV5Y2pPtggHktf0dt_TQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/bYAk_tzaV5Y2pPtggHktf0dt_TQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/bYAk_tzaV5Y2pPtggHktf0dt_TQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/J2meGroup/~4/GewSCyLL10Q" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://j2megroup.blogspot.com/feeds/5482192697319080972/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5658388309594372146&amp;postID=5482192697319080972&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5658388309594372146/posts/default/5482192697319080972?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5658388309594372146/posts/default/5482192697319080972?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/J2meGroup/~3/GewSCyLL10Q/beyond-smartphones-rich-applications.html" title="Beyond Smartphones: Rich Applications and Services for the Mobile Masses" /><author><name>Ernandes Mourão Júnior</name><uri>http://www.blogger.com/profile/05269717786146137246</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="33" height="26" src="http://4.bp.blogspot.com/_mIej7YtLRRM/STwlvtdLMGI/AAAAAAAAAvg/3hmiXcqcfZE/S220/Picture.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://j2megroup.blogspot.com/2010/10/beyond-smartphones-rich-applications.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CE4HSHk8eyp7ImA9WhdXFkk.&quot;"><id>tag:blogger.com,1999:blog-5658388309594372146.post-5069459273307322996</id><published>2010-10-08T16:41:00.002-03:00</published><updated>2011-08-29T15:35:39.773-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-29T15:35:39.773-03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="twitter api me" /><category scheme="http://www.blogger.com/atom/ns#" term="framework" /><category scheme="http://www.blogger.com/atom/ns#" term="twitter" /><category scheme="http://www.blogger.com/atom/ns#" term="xauth" /><title>xAuth lib: OAuth made easy</title><content type="html">Hi all,&lt;br /&gt;
&lt;br /&gt;
Nowadays, important sites on web are growing their presence in mobile space. As usual, a quick way to go in this direction is releasing mobile versions of their sites. On the other hand, they also use to provide means so third-party sites and apps can access their content and services. For instance, many sites (or platforms), e.g., Google, Yahoo, &lt;a href="http://www.amazon.com/Facebook-Effect-Inside-Company-Connecting/dp/1439102112?ie=UTF8&amp;amp;tag=j2grbl-20&amp;amp;link_code=btl&amp;amp;camp=213689&amp;amp;creative=392969" target="_blank"&gt;Facebook&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=j2grbl-20&amp;amp;l=btl&amp;amp;camp=213689&amp;amp;creative=392969&amp;amp;o=1&amp;amp;a=1439102112" style="border: medium none ! important; margin: 0px ! important; padding: 0px ! important;" width="1" /&gt;, &lt;a href="http://www.amazon.com/Twitter-Book-Tim-OReilly/dp/0596802811?ie=UTF8&amp;amp;tag=j2grbl-20&amp;amp;link_code=btl&amp;amp;camp=213689&amp;amp;creative=392969" target="_blank"&gt;Twitter&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=j2grbl-20&amp;amp;l=btl&amp;amp;camp=213689&amp;amp;creative=392969&amp;amp;o=1&amp;amp;a=0596802811" style="border: medium none ! important; margin: 0px ! important; padding: 0px ! important;" width="1" /&gt;, etc, provide APIs, so that developer can build their products that rely on content from them.&lt;br /&gt;
&lt;br /&gt;
To start accessing any content or service from one of those sites, you first need to authenticate with it. The site needs to recognize you so it can open their doors for you. The type of authentication may vary depending on each site. It is commom to encounter with &lt;a href="http://en.wikipedia.org/wiki/Basic_access_authentication" target="_blank"&gt;Http Basic Auth&lt;/a&gt;, which is very easy to work with. However, most services are shifting to &lt;a href="http://en.wikipedia.org/wiki/Oauth" target="_blank"&gt;OAuth&lt;/a&gt;. A more secure auth mechanism that also avoids third-party sites have access to user's credentials. Recently, Twitter turned off its Http Basic Auth, to support only OAuth. Some sites still work with both, but it is matter of time so they keep only OAuth.&lt;br /&gt;
&lt;br /&gt;
Due to some aspects of OAuth, its pure implementation is not feasible for desktop and mobile apps. This is related to a spec flow that demands your app to be redirected forth/back to/from a login page. It is kind of complicated to accomplish that in a mobile app, for instance. To avoid this step, they created &lt;b&gt;xAuth&lt;/b&gt;, which is same as OAuth, but the login page flow.&lt;br /&gt;
&lt;br /&gt;
An OAuth request is quite more complicated to perform, since it requires a signature for the request, which uses some hash algoritms and encoders. To now more about it, click &lt;a href="http://dev.twitter.com/pages/auth#signing-requests" target="_blank"&gt;here&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
In my &lt;b&gt;Twitter API ME&lt;/b&gt; project, I had to implement it, since as I previously said, Twitter turned off Http Basic Auth. However, my xAuth implementation was designed to be reused by other apps and frameworks. So, if you are looking for xAuth lib for your app, you are at the right place. So, to start it up, download the latest version of Twitter API ME at &lt;a href="http://www.twitterapime.com/" target="_blank"&gt;www.twitterapime.com&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Below I will put some code snippets that demonstrate how to get authenticated to Twitter and then post a tweet. After downloading the API, you will need to obtain your app's OAuth keys: consumer key and secret. They will be used to produce that signature I mentioned ealier. Those keys are provided by the site you want to connect with, after a quick subscription. Let's show some code:&lt;br /&gt;
&lt;br /&gt;
&lt;div style="font-family: inherit;"&gt;&lt;span style="font-size: small;"&gt;&lt;i&gt;01. HttpRequest req = new HttpRequest("https://api.twitter.com/oauth/access_token");&lt;br /&gt;
02. req.setMethod(HttpConnection.POST);&lt;/i&gt;&lt;br /&gt;
&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;i&gt;&lt;span style="font-size: small;"&gt;03. XAuthSigner signer = new XAuthSigner("&lt;consumerkey&gt;", "&lt;consumersecret&gt;");&lt;br /&gt;
04. signer.signForAccessToken(req, "&lt;username&gt;", "&lt;password&gt;");&lt;br /&gt;
&lt;br /&gt;
05. try {&lt;br /&gt;
06.&amp;nbsp; &amp;nbsp;&amp;nbsp; HttpResponse resp = req.send();&lt;br /&gt;
07.&amp;nbsp; &amp;nbsp;&amp;nbsp; if (resp.getCode() == HttpConnection.HTTP_OK) {&lt;br /&gt;
08. &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Token accessToken = Token.parse(resp.getBodyContent());&lt;br /&gt;
&lt;br /&gt;
09. &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; req.close();&lt;br /&gt;
&lt;br /&gt;
10.&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; req = new HttpRequest("http://api.twitter.com/1/statuses/update.xml");&lt;br /&gt;
11.&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; req.setMethod(HttpConnection.POST);&lt;br /&gt;
12.&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; req.setBodyParameter("status", "&lt;tweet text=""&gt;");&lt;br /&gt;
13.&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; req.setSigner(signer, accessToken);&lt;br /&gt;
&lt;br /&gt;
14.&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; resp = req.send();&lt;br /&gt;
15.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
16. } catch (IOException e) {&lt;br /&gt;
17.&amp;nbsp; &amp;nbsp;&amp;nbsp; e.printStackTrace();&lt;br /&gt;
18. } finally {&lt;br /&gt;
19.&amp;nbsp; &amp;nbsp;&amp;nbsp; try {&lt;br /&gt;
20.&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; req.close();&lt;br /&gt;
21.&amp;nbsp; &amp;nbsp;&amp;nbsp; } catch (IOException e) {}&lt;br /&gt;
22. }&lt;/tweet&gt;&lt;/password&gt;&lt;/username&gt;&lt;/consumersecret&gt;&lt;/consumerkey&gt;&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;br /&gt;
Basically what we do is to sign each request, using &lt;i&gt;XAuthSigner &lt;/i&gt;class, as we see in the lines 4 and 13. As soon as you get authenticated, you will obtain your access token (line 8). From this point on, every request will be signed using your keys and token. This token, in turn, can be stored for further use. It avoids requesting user's credentials next time and skip auth step.&lt;br /&gt;
&lt;br /&gt;
I recommend before trying to access any site using xAuth, that read its documentation first, so you can see whether they require an additional procedure to work with xAuth. I am mentioned that, because Twitter, for instance, demands us to send an e-mail to them requesting privileges to use xAuth in our apps. Otherwise, it will not work. So be aware of that.&lt;br /&gt;
&lt;br /&gt;
So, that's all guys! I hope it be useful for all of you.&lt;br /&gt;
&lt;br /&gt;
See you in the next post...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5658388309594372146-5069459273307322996?l=j2megroup.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/ptbi7iH8h1jKrHm6_ZRCbop6qXg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ptbi7iH8h1jKrHm6_ZRCbop6qXg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/ptbi7iH8h1jKrHm6_ZRCbop6qXg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ptbi7iH8h1jKrHm6_ZRCbop6qXg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/J2meGroup/~4/NEYjBtazI9c" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://j2megroup.blogspot.com/feeds/5069459273307322996/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5658388309594372146&amp;postID=5069459273307322996&amp;isPopup=true" title="7 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5658388309594372146/posts/default/5069459273307322996?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5658388309594372146/posts/default/5069459273307322996?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/J2meGroup/~3/NEYjBtazI9c/xauth-lib-oauth-made-easy.html" title="xAuth lib: OAuth made easy" /><author><name>Ernandes Mourão Júnior</name><uri>http://www.blogger.com/profile/05269717786146137246</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="33" height="26" src="http://4.bp.blogspot.com/_mIej7YtLRRM/STwlvtdLMGI/AAAAAAAAAvg/3hmiXcqcfZE/S220/Picture.jpg" /></author><thr:total>7</thr:total><feedburner:origLink>http://j2megroup.blogspot.com/2010/10/xauth-lib-oauth-made-easy.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DU8ER3gyfSp7ImA9Wx5VFUk.&quot;"><id>tag:blogger.com,1999:blog-5658388309594372146.post-4378956820083174644</id><published>2010-10-08T11:23:00.000-03:00</published><updated>2010-10-08T11:23:26.695-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-10-08T11:23:26.695-03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="ad" /><category scheme="http://www.blogger.com/atom/ns#" term="tip" /><title>Millennial Media: Mobile Advertising with Java ME</title><content type="html">Hi all,&lt;br /&gt;
&lt;br /&gt;
It is notorious the growth of mobile adverstising in the last years, since mobile devices are more connected to internet. More and more publishers are investing on it, in order to sell their products/services, based on a huge number of potential consumers, which use their devices everyday to read e-mails, news, chat, etc. It is a market of millions of dollars a year.&lt;br /&gt;
&lt;br /&gt;
Who makes possible all this mobile advertising are specialized companies known as Ad Networks. They are responsible for connecting publishers to advertisers. In our scenery, Mobile Ad Networks. Regarding us, developers, those companies provide a variety of means for us to integrate our apps with their ads platform. They provide SDKs for the main mobile platform in the market, e.g., &lt;a href="http://www.amazon.com/Beginning-iOS-4-Application-Development/dp/0470918020?ie=UTF8&amp;amp;tag=j2grbl-20&amp;amp;link_code=btl&amp;amp;camp=213689&amp;amp;creative=392969" target="_blank"&gt;iOS&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=j2grbl-20&amp;amp;l=btl&amp;amp;camp=213689&amp;amp;creative=392969&amp;amp;o=1&amp;amp;a=0470918020" style="border: medium none ! important; margin: 0px ! important; padding: 0px ! important;" width="1" /&gt;, &lt;a href="http://www.amazon.com/Pro-Android-2-Sayed-Hashimi/dp/1430226595?ie=UTF8&amp;amp;tag=j2grbl-20&amp;amp;link_code=btl&amp;amp;camp=213689&amp;amp;creative=392969" target="_blank"&gt;Android&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=j2grbl-20&amp;amp;l=btl&amp;amp;camp=213689&amp;amp;creative=392969&amp;amp;o=1&amp;amp;a=1430226595" style="border: medium none ! important; margin: 0px ! important; padding: 0px ! important;" width="1" /&gt;, Flash, WebOS, etc. All you need to do is to sign up in one of those companies, e.g. AdMob, iAd, Quatto, Jumptap, etc, and download the SDK. Most of them are very documented and pretty easy to install.&lt;br /&gt;
&lt;br /&gt;
But I believe you may be wondering: Do they not support &lt;a href="http://www.amazon.com/Beginning-J2ME-Novice-Professional-Third/dp/1590594797?ie=UTF8&amp;amp;tag=j2grbl-20&amp;amp;link_code=btl&amp;amp;camp=213689&amp;amp;creative=392969" target="_blank"&gt;Java ME&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=j2grbl-20&amp;amp;l=btl&amp;amp;camp=213689&amp;amp;creative=392969&amp;amp;o=1&amp;amp;a=1590594797" style="border: medium none ! important; margin: 0px ! important; padding: 0px ! important;" width="1" /&gt; platform? The answer is no. However, just a few of them do. On the other hand, they do not provide a specific SDK for Java ME, just like they do for iOS, Android, Flash, etc. They usualy provide a &lt;a href="http://www.amazon.com/Restful-Web-Services-Leonard-Richardson/dp/0596529260?ie=UTF8&amp;amp;tag=j2grbl-20&amp;amp;link_code=btl&amp;amp;camp=213689&amp;amp;creative=392969" target="_blank"&gt;RESTful &lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=j2grbl-20&amp;amp;l=btl&amp;amp;camp=213689&amp;amp;creative=392969&amp;amp;o=1&amp;amp;a=0596529260" style="border: medium none ! important; margin: 0px ! important; padding: 0px ! important;" width="1" /&gt;API, which your app can access in order to retrieve an ad. Web apps also use this sort of API to work with ads.&lt;br /&gt;
&lt;br /&gt;
Recently, I have been searching for an ad platform in order to provide ads from our app, &lt;a href="http://www.mstocksapp.com/" target="_blank"&gt;M-Stocks App&lt;/a&gt;. For our iOS and Android versions it was easy to find, but for Java ME, it took awhile. For instance, we tested AdMob, Adfonic, Jumptap but no success. Even their RESTful API did not work for us. We were about to create our own ad platform, when we finally encountered &lt;a href="http://www.millennialmedia.com/" target="_blank"&gt;Millennial Media&lt;/a&gt;. On their website, they state Java ME support. So I decided to give it a shot.&lt;br /&gt;
&lt;br /&gt;
We sign it up and then started to read the documentation. Actually, they do not provide a Java SDK, in fact they provide a RESTful API, called &lt;b&gt;Server-Side API&lt;/b&gt;. This API is very easy to work with. They just require a few paremeters (i.e. UID, IP, User-agent and App ID). By default, they return a &lt;a href="http://www.amazon.com/HTML5-Up-Running-Mark-Pilgrim/dp/0596806027?ie=UTF8&amp;amp;tag=j2grbl-20&amp;amp;link_code=btl&amp;amp;camp=213689&amp;amp;creative=392969" target="_blank"&gt;HTML&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=j2grbl-20&amp;amp;l=btl&amp;amp;camp=213689&amp;amp;creative=392969&amp;amp;o=1&amp;amp;a=0596806027" style="border: medium none ! important; margin: 0px ! important; padding: 0px ! important;" width="1" /&gt; code, which contains a ad's image url and link. For instance, if you utilize LWUIT as UI framework, you just need to set this content in a HTML viewer component. Otherwise, you need to implement a workaround.&lt;br /&gt;
&lt;br /&gt;
The workaround is simple. As in the HTML content there are an ad's image url and link, you just need to parse it and get those information. Once you have the ad's image url just download the image using HttpConnection and display it using &lt;i&gt;ImageItem &lt;/i&gt;or &lt;i&gt;Canvas&lt;/i&gt;. To open the ad's link, do it using &lt;i&gt;MIDlet.platformRequest(String)&lt;/i&gt;, which will open up the device's browser.&lt;br /&gt;
&lt;br /&gt;
On the other hand, Server-Side API also enables you to receive an ad in XML format, which contain more data about the ad, e.g., image type and size. To enable this, you need to send an e-mail to Millenial Media's support and requesting it for your app. However, I actually tried that, but I got no reponse from them so far. Because of that, I am parsing the HTML.&lt;br /&gt;
&lt;br /&gt;
Other interesting feature by Millenial Media is the ability of integrating with other ad networks. You can set up your AdMob account, for instance, and then receive ads from Millenial and AdMob in your app. Particularly, I am using this approach.&lt;br /&gt;
&lt;br /&gt;
By now, we are going good with Millenial Media. I hope it brings good revenues for us. Mobile advertising is a very good approach for free apps developers. It is a good alternative, since we do have many options to charge for Java ME apps.&lt;br /&gt;
&lt;br /&gt;
See you in the next post...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5658388309594372146-4378956820083174644?l=j2megroup.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/udl2J2W6Te1IZnStu8x5bJ2zJp8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/udl2J2W6Te1IZnStu8x5bJ2zJp8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/udl2J2W6Te1IZnStu8x5bJ2zJp8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/udl2J2W6Te1IZnStu8x5bJ2zJp8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/J2meGroup/~4/gyLQvI5cRK0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://j2megroup.blogspot.com/feeds/4378956820083174644/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5658388309594372146&amp;postID=4378956820083174644&amp;isPopup=true" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5658388309594372146/posts/default/4378956820083174644?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5658388309594372146/posts/default/4378956820083174644?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/J2meGroup/~3/gyLQvI5cRK0/millennial-media-mobile-advertising.html" title="Millennial Media: Mobile Advertising with Java ME" /><author><name>Ernandes Mourão Júnior</name><uri>http://www.blogger.com/profile/05269717786146137246</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="33" height="26" src="http://4.bp.blogspot.com/_mIej7YtLRRM/STwlvtdLMGI/AAAAAAAAAvg/3hmiXcqcfZE/S220/Picture.jpg" /></author><thr:total>4</thr:total><feedburner:origLink>http://j2megroup.blogspot.com/2010/10/millennial-media-mobile-advertising.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ck4BQn85fSp7ImA9Wx5VFUk.&quot;"><id>tag:blogger.com,1999:blog-5658388309594372146.post-4656838549382791579</id><published>2010-10-08T09:29:00.000-03:00</published><updated>2010-10-08T09:29:13.125-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-10-08T09:29:13.125-03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="plug-in" /><category scheme="http://www.blogger.com/atom/ns#" term="persistence" /><category scheme="http://www.blogger.com/atom/ns#" term="eclipse" /><category scheme="http://www.blogger.com/atom/ns#" term="floggy" /><title>Floggy: Powered by Eclipse Plugin</title><content type="html">Hi all,&lt;br /&gt;
&lt;br /&gt;
Do you remind &lt;b&gt;Floggy&lt;/b&gt;? No? So click &lt;a href="http://j2megroup.blogspot.com/2008/11/floggy-brazilian-technology-in-data.html"&gt;here&lt;/a&gt; and refresh your mind. In a few words it is a persistence framework, which makes easier the work with data persistence in Java ME. No more handling byte arrays and record stores. My students liked it! They were not confortable with the idea of working with bytes, so I decided to introduce Floggy to them. This behavior is pretty commom from developers coming from JEE world, used to deal with &lt;a href="http://www.amazon.com/Beginning-Hibernate-Second-Jeff-Linwood/dp/1430228504?ie=UTF8&amp;amp;tag=j2grbl-20&amp;amp;link_code=btl&amp;amp;camp=213689&amp;amp;creative=392969" target="_blank"&gt;Hibernate&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=j2grbl-20&amp;amp;l=btl&amp;amp;camp=213689&amp;amp;creative=392969&amp;amp;o=1&amp;amp;a=1430228504" style="border: medium none ! important; margin: 0px ! important; padding: 0px ! important;" width="1" /&gt;, &lt;a href="http://www.amazon.com/Pro-EJB-Java-Persistence-API/dp/1590596455?ie=UTF8&amp;amp;tag=j2grbl-20&amp;amp;link_code=btl&amp;amp;camp=213689&amp;amp;creative=392969" target="_blank"&gt;JPA&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=j2grbl-20&amp;amp;l=btl&amp;amp;camp=213689&amp;amp;creative=392969&amp;amp;o=1&amp;amp;a=1590596455" style="border: medium none ! important; margin: 0px ! important; padding: 0px ! important;" width="1" /&gt;, etc.&lt;br /&gt;
&lt;br /&gt;
For my surprise, one of the students that decided to work with Floggy, in order to develop his final evaluation project, introduced me a pretty nice tool: &lt;b&gt;Floggy Eclipse Plugin&lt;/b&gt;. I really did not know it. That time I wrote about Floggy, I did not pay attention in all details of the project.&lt;br /&gt;
&lt;br /&gt;
Anyway, always is time to introduce good things. Floggy Eclipse Plugin makes much easier the process of working with Floggy: from setup until deployment phase. In addition, you do not even need to import Floggy lib into your project. The plugin does it for you.&lt;br /&gt;
&lt;br /&gt;
The install process of Floggy Eclipse Plugin is just like any other &lt;a href="http://www.amazon.com/Eclipse-Plug-ins-3rd-Eric-Clayberg/dp/0321553462?ie=UTF8&amp;amp;tag=j2grbl-20&amp;amp;link_code=btl&amp;amp;camp=213689&amp;amp;creative=392969" target="_blank"&gt;Eclipse plugin&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=j2grbl-20&amp;amp;l=btl&amp;amp;camp=213689&amp;amp;creative=392969&amp;amp;o=1&amp;amp;a=0321553462" style="border: medium none ! important; margin: 0px ! important; padding: 0px ! important;" width="1" /&gt;. Once istalled, all you need to to is to enable it for your project. Just right-click in your project folder and then press "Add Floggy Nature". Easy, huh? Now you are good to go! However, if you need more details on it, here it goes the &lt;a href="http://floggy.sourceforge.net/configuration/eclipse.html" target="_blank"&gt;link&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Floggy is a very good alternative for Java ME persistence. It is worth a shot.&lt;br /&gt;
&lt;br /&gt;
See you in the next post...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5658388309594372146-4656838549382791579?l=j2megroup.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/4Myd6Orq-lUBXSyvRfGsZv1d46g/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/4Myd6Orq-lUBXSyvRfGsZv1d46g/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/4Myd6Orq-lUBXSyvRfGsZv1d46g/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/4Myd6Orq-lUBXSyvRfGsZv1d46g/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/J2meGroup/~4/Mc61_hfRuaw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://j2megroup.blogspot.com/feeds/4656838549382791579/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5658388309594372146&amp;postID=4656838549382791579&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5658388309594372146/posts/default/4656838549382791579?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5658388309594372146/posts/default/4656838549382791579?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/J2meGroup/~3/Mc61_hfRuaw/floggy-powered-by-eclipse-plugin.html" title="Floggy: Powered by Eclipse Plugin" /><author><name>Ernandes Mourão Júnior</name><uri>http://www.blogger.com/profile/05269717786146137246</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="33" height="26" src="http://4.bp.blogspot.com/_mIej7YtLRRM/STwlvtdLMGI/AAAAAAAAAvg/3hmiXcqcfZE/S220/Picture.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://j2megroup.blogspot.com/2010/10/floggy-powered-by-eclipse-plugin.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0cCSHs_cCp7ImA9Wx5VFUk.&quot;"><id>tag:blogger.com,1999:blog-5658388309594372146.post-3442969943139716934</id><published>2010-10-04T13:40:00.005-03:00</published><updated>2010-10-08T11:44:29.548-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-10-08T11:44:29.548-03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="javaone" /><category scheme="http://www.blogger.com/atom/ns#" term="lwuit" /><title>LWUIT: In the spotlight at Java One</title><content type="html">Hi all,&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;LWUIT&lt;/b&gt; was one of the most mentioned topics related to mobility at Java One. This year, there were many sessions related to it, for instance:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Beyond Smartphones: Rich Applications and Services for the Mobile Masses&lt;/li&gt;
&lt;li&gt;Developing Java TV Applications with LWUIT for DTVi-J (Ginga-J) Brazil&lt;/li&gt;
&lt;li&gt;LWUIT Cheat Sheet: How to Optimize Your LWUIT-Based Java ME Applications&lt;/li&gt;
&lt;li&gt;Introducing Java TV Widget Development&lt;/li&gt;
&lt;/ul&gt;Since &lt;a href="http://www.amazon.com/LWUIT-1-1-Java-ME-Developers/dp/184719740X?ie=UTF8&amp;amp;tag=j2grbl-20&amp;amp;link_code=btl&amp;amp;camp=213689&amp;amp;creative=392969" target="_blank"&gt;LWUIT&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=j2grbl-20&amp;amp;l=btl&amp;amp;camp=213689&amp;amp;creative=392969&amp;amp;o=1&amp;amp;a=184719740X" style="border: medium none ! important; margin: 0px ! important; padding: 0px ! important;" width="1" /&gt; has joined ORACLE (since times of Sun), it has achieved a huge visibility and importance in mobile scenery. Now, developers are more aware of what they can do for their apps, regarding UI. Instead of struggling to implement their own UI frameworks, now they know that there is a good option to invest on. In addition, LWUIT has also worked hard to provide more features and be more stable as new versions are released.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Today, I would like to share with you this &lt;a href="https://lwuit.dev.java.net/Writing_Stunning_Cross_Platform_Applications_U.pdf" target="_blank"&gt;short presention&lt;/a&gt; about LWUIT 1.4 and some other related topics, e.g., Virtual Keyboard, HTMLComponent, etc, that was also presented at Java One. Who hold this presention were Ariel Levin and Chen Fishbein. Two key LWUIT developers.&lt;br /&gt;
&lt;br /&gt;
I hope you like, since it gives a good overview of what now you can do with LWUIT 1.4.&lt;br /&gt;
&lt;br /&gt;
See you in the next post...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5658388309594372146-3442969943139716934?l=j2megroup.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/YRd3h5VTI6KGvZeov9K9_ssHTek/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/YRd3h5VTI6KGvZeov9K9_ssHTek/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/YRd3h5VTI6KGvZeov9K9_ssHTek/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/YRd3h5VTI6KGvZeov9K9_ssHTek/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/J2meGroup/~4/4ZSS4073FoQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://j2megroup.blogspot.com/feeds/3442969943139716934/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5658388309594372146&amp;postID=3442969943139716934&amp;isPopup=true" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5658388309594372146/posts/default/3442969943139716934?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5658388309594372146/posts/default/3442969943139716934?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/J2meGroup/~3/4ZSS4073FoQ/lwuit-in-spotlight-at-java-one.html" title="LWUIT: In the spotlight at Java One" /><author><name>Ernandes Mourão Júnior</name><uri>http://www.blogger.com/profile/05269717786146137246</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="33" height="26" src="http://4.bp.blogspot.com/_mIej7YtLRRM/STwlvtdLMGI/AAAAAAAAAvg/3hmiXcqcfZE/S220/Picture.jpg" /></author><thr:total>1</thr:total><feedburner:origLink>http://j2megroup.blogspot.com/2010/10/lwuit-in-spotlight-at-java-one.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Dk8FRHkyfyp7ImA9Wx5WGU4.&quot;"><id>tag:blogger.com,1999:blog-5658388309594372146.post-4587435779390509824</id><published>2010-10-01T09:06:00.000-03:00</published><updated>2010-10-01T09:06:55.797-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-10-01T09:06:55.797-03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="javaone" /><title>Java ME: Next steps</title><content type="html">Hi all,&lt;br /&gt;
&lt;br /&gt;
As most of Java community must know, last month we had JavaOne event, in San Francisco, CA. It was a huge event, as usual. Many Java topics were discussed and introduced. But one of them has great importance for us, which is related to &lt;a href="http://www.amazon.com/Beginning-trade-Platform-Novice-Professional/dp/1430210613?ie=UTF8&amp;amp;tag=j2grbl-20&amp;amp;link_code=btl&amp;amp;camp=213689&amp;amp;creative=392969" target="_blank"&gt;Java ME&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=j2grbl-20&amp;amp;l=btl&amp;amp;camp=213689&amp;amp;creative=392969&amp;amp;o=1&amp;amp;a=1430210613" style="border: medium none ! important; margin: 0px ! important; padding: 0px ! important;" width="1" /&gt;.&lt;br /&gt;
&lt;br /&gt;
We all had our doubts about Java ME's future after acquisition of Sun Microsystems by &lt;a href="http://www.amazon.com/Beginning-Oracle-Database-11g-Administration/dp/1590599683?ie=UTF8&amp;amp;tag=j2grbl-20&amp;amp;link_code=btl&amp;amp;camp=213689&amp;amp;creative=392969" target="_blank"&gt;ORACLE&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=j2grbl-20&amp;amp;l=btl&amp;amp;camp=213689&amp;amp;creative=392969&amp;amp;o=1&amp;amp;a=1590599683" style="border: medium none ! important; margin: 0px ! important; padding: 0px ! important;" width="1" /&gt;. It has been created a big expectation on what would be the next steps of this platform. Fortunately, they had something prepared to announce at Java One.&lt;br /&gt;
&lt;br /&gt;
There are some good news for all of us, which I want to share with you. Who outlines all these good stuff is Terrence Barr. A very known name in Mobile &amp;amp; Embedded Java community. I will drop here a &lt;a href="http://terrencebarr.wordpress.com/2010/10/01/javaone-2010-takeaways-for-mobile-embedded/" target="_blank"&gt;link&lt;/a&gt; to his latest post, where he describes what is coming on Java ME's future.&lt;br /&gt;
&lt;br /&gt;
However, I really do not know how soon we will get all those new features. Since, we all know that it does not depend on ORACLE only. Unfortunately, Java ME-enabled devices are not produced by ORACLE itself. I wish we could have something for Java ME as we have for iOS and Android platforms.&lt;br /&gt;
&lt;br /&gt;
I really hope it does not end up like MIDP 3.0. Let's cheer for the opposite!&lt;br /&gt;
&lt;br /&gt;
See you in the next post...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5658388309594372146-4587435779390509824?l=j2megroup.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/aB9uFk3oJ9mtyscNGATiQotRgOs/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/aB9uFk3oJ9mtyscNGATiQotRgOs/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/aB9uFk3oJ9mtyscNGATiQotRgOs/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/aB9uFk3oJ9mtyscNGATiQotRgOs/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/J2meGroup/~4/TourK3Up2e8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://j2megroup.blogspot.com/feeds/4587435779390509824/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5658388309594372146&amp;postID=4587435779390509824&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5658388309594372146/posts/default/4587435779390509824?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5658388309594372146/posts/default/4587435779390509824?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/J2meGroup/~3/TourK3Up2e8/java-me-next-steps.html" title="Java ME: Next steps" /><author><name>Ernandes Mourão Júnior</name><uri>http://www.blogger.com/profile/05269717786146137246</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="33" height="26" src="http://4.bp.blogspot.com/_mIej7YtLRRM/STwlvtdLMGI/AAAAAAAAAvg/3hmiXcqcfZE/S220/Picture.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://j2megroup.blogspot.com/2010/10/java-me-next-steps.html</feedburner:origLink></entry></feed>

