Continued: The Pain of Flash Lite 3

Ugur started a very good discussion on his blog about current obstacles and bugs in Flash Lite 3 implementation, and how they are effecting developers.

I’d like to continue the discussion by posting my thoughts here.

Flash Lite 3.0 and 3.1

Ugur already discussed the current issues with Flash Lite 3 with Security Sandbox (or as Ugur named it Security Painbox), Trusted folder and XML Socket.

I read somewhere when I was following news about FL3.1 release to OEMs that FL3.1 is sort of a bug fix for Security Sandbox. And it will remove this *feature*.

I raised my thoughts quite strongly about Security Sandbox issue in FL3 beta, and even many developers were standing with me, but to no avail. Now they have learned that this is a curse to FL developers, now here comes the FL3.1 with a bug fix. And start of another J2ME like fragmented technology!

Adobe/MM is used learn lessons hard way. They did same with Central and the product died, and they are continuing with FL as well which I believe is quite unfortunate.

I have some more FL issues to add in FL Pain-List,

1. So many nags

FL shows many nags for each operation which involves device APIs. For example if my application calls fscommand API to dial a phone number, FL player shows a nag to user, and if user selects yes, then it performs operation.

Not to mention, that most of these APIs are only triggered through “User-Click” events, so if user does not press any button, the API cannot be called, or its ignored. So, when user have already interacted with application to perform operation, there’s no need to ask the user again.

2. Browser – click on FL control

Adobe and Nokia trying to make FL to work better as browser plugin, and not supporting standalone implementation very well. There’s a big drawback thats not fixed even in latest FL3, and I’m sure it will be same in FL3.1.

When <object>/<embed> tag is used to embed SWF in a page specifically made for FL3 mobile devices, the mobile browser does not give focus to SWF, and user first have to select and click SWF content to interact. This is similar as Active Content issue with IE6/7.

We can write a script to avoid this behavior in IE, but there’s no workaround for mobile browser for embedded SWF. The only workaround I discovered is directly calling the SWF in browser. This way SWF is downloaded to temp and opened by built-in FL player.

3. Can’t quit without key-press

FL application cannot quit until user key-press event is detected. The add-on with this is that only one operation can be performed at a time. So, if I have a background process running (i.e. KuneriLite), I cannot send shutdown request via loadVars to BG engine and quit FL at the same key-press event.

I have to first make a request for shutdown on first key-press, and on second key-press, call to Quit fscommand to exit FL application. So, user have to click twice to close my application.

4. If unable to load data, terminate app?

The most bad user experience is that the exception/error is directly displayed to end-user. I.e. “Content error -13”, what that mean? And user is provided with two options, Continue and Close.

If user continues, the application works, and there’s no way in AS we could notice that there was a error. And if user selects close, the application is terminated.

There’s no way to control errors in FL using AS. Specifically when loading external content. If any data loading call fails, the application cannot get any thing about this before user selects continue on the error nag.

5. Adobe not responding

The more frustration for me starts when no one at Adobe reply to emails. There’s a separate email for mobile developers to get in touch with FL guys at Adobe, but it doesn’t work, or all the emails go into spam folder.

I have personal emails addresses of FL guys, but I found them replying to mailing-lists, but not off-list emails, not a single word I get back, even if I try twice :/

Conclusion

I’d like to conclude by giving Nokia a big praise for their great support to FL developers and community. The way Nokia engineering team get back to developers to help, I’m impressed!

I also hope that recent announcements made by Adobe regarding FL technology would be step forward in right direction. And I also hope that Adobe would hear and support the FL developers community, and developers who are trying to explore new possibilities with FL.

// chall3ng3r //

24 thoughts on “Continued: The Pain of Flash Lite 3

  1. Hi Faisal,

    Nice post and further good points.

    1. So many nags is a Nokia tradition and a terrible user experience in my opinion. Under the name of security, they ask user to confirm anything. Well, there is a security reason behind; but I don’t see the point. Check how iPhone handles everything in a very nice way, without bugging user. I only entered my WLAN password once to iPhone and never (ever) saw even a confirmation dialog again. It connects to internet where ever available without even I notice. For Nokia phones, you have to dig out menus, repeat same process again and again. I know that FP2 devices will have different UI, let’s see how it’s handled there. For users or for geeks.

    I believe, there is nothing much to do about it from Adobe’s side; due I believe Nokia is the one who decides these things.

    2. In my opinon, Adobe’s and Nokia’s strategy is pushing Flash Lite as a browser plugin. But it’s ridiculously unusable due to the reason you mentioned. I personally do not see any way that I would use Flash Lite with Nokia browser. Totally not-usable. (Unless users pushed to get used to in years).

    Do you know how is the UX with other browsers (ie SE)

    Another point here: Things do not go as you plan always. Sometimes you release a product with a different intention; but community finds a completely different use case for that. I believe this is the case for Flash Lite. Although Adobe and Nokia wants to push it for a browser plugin, maybe over 90% of Flash Lite content you see is with standalone player. I don’t see why to push that much: Message is clear.

    3. That’s another issue and why we created a special command for that.

    http://wiki.kunerilite.net/index.php?title=Special_commands

    loadVariables(“http://127.0.0.1:1001/Basic/Close”, “”);

    Will close Flash Lite as soon as it’s called.

    People may ask why you need such thing; well, sometime when user wants to quit, you need to perform some actions before quiting. And there is no way without this command. That’s why..

    4. Again a usability issue. Do you know how it behaves on other platoforms?

    5. Ok, to be honest, at the beginning I had the same problem. Couldn’t get direct response from anyone. I understand it though, hard to respond everyone, for every detail; especially if there are some confidential information is involved. However, right now there are Forums, mailing lists and a big factor called Mark Doherty, who in my opinion is a great added value to Flash Lite developers from Adobe’s side. From Nokia, situation was same, but since Riku got into the picture, things changed in a positive way in my personal opinion. At least I see that those guys actively get involved in mailing lists, forums and even direct emails, trying to bring an answer or solution to problems. I am sure they will state their opinion here as well

    In my opinion, these kind of conversations / discussions / feedbacks are in favor of the community and technology. Aren’t there great things about Flash Lite 3.0? Yes there are, but bragging does not usually take things further, but constructive criticism.

  2. Hi Faisal,

    Thanks for the post, Bill Perry and I are always listening and we push as much feedback as we can into the products.

    “5. Adobe not responding”
    If you don’t get responses then you should ask specific questions. Put your questions at the end of emails, make them bold or we might miss them.

    This month we announced the Open Screen Project which is specifically geared to reducing the potential of fragmentation as we move to the 1 billion device mark. Considering the amount of companies involved it would appear that this is important not just to Adobe, but to the whole industry.

    Mark

    Mark

  3. @Ugur, for your question in #2, I have only used FL on S60 devices, so I’m not sure how is the UX on SE/LG or other devices.

    #2, Yes, I also think same, :)

    for your question on #4, On desktop browsers, Flash simply ignores errors, and user never knows if any error has hapened at all. From Flash 9, now debug player shows a detailed exception in a popup window.

    Yes, of course, these discussions are put on just to help Adobe and other technology partners about what developers want FL to be.

    // chall3ng3r //

  4. Hi,

    i have implemented SimpleHttpServer using RSocket for connection between FlashLite 3.1. application. In the application, several images are loaded (with MovieClipLoader) from local http server which runs on 127.0.0.1 (KInetAddrLoop). Everything is working fine, but when i try to load images asynchronously, only first image is loaded and there is also only one request to local server. If i change IP adress to external interface (WLAN or modem, eg. 10.10.1.200), images are loaded properly.

    Anyone with some answers?

  5. Hello Simon,

    I think it could be crossdomain.xml policy file issue. Did you set your server to send this XML when Flash Lite client makes a request to your server.

    Take a look at the following application http://www.swf2go.com/wiki/PyS60Sample_BeMyLips

    It's programmed in PyS60 and Flash Lite, it shows how you can send the file when it's requested by Flash Lite client. Please note Flash Lite automatically make this crossdomain file call, so you don't have any control over it. Just be sure to implement it in your server.

    One more thing, make sure you bind your server to listen on “127.0.0.1″, not * or every IP. Sometimes this could be issue. So, just bind it to listen on one IP and try again.

    I hope this information will help you resolving the issue.

    // chall3ng3r //

  6. Hi // chall3ng3r //,

    thank you for answers, but my Flash Lite application never triggers http://127.0.0.1:8888/crossdomain.xml. I have tested in phone browser and url is working.
    The application is Published with Network Access Only. Any clues, why crossdomain.xml is never triggered?

    And the http server is listening only on loopback (127.0.0.1).

  7. Hi Simon,

    Hmm… Are you loading all images at the same time? I mean using a “for” loop… one after another… or load one, then wait for it to load, then load next? or one image is loaded, then on some user interaction next is loaded?

    Maybe you can share a bit of your code in your Flash Lite application, so I can better understand how you are loading images.

    Remember, there are now many versions of Flash Lite, and they include really buggy ones as well :)

    It'll help if you could also get the full version number of FL on your device, and also firmware version. Use $version variable to get FL version, or simply use the following tool http://www.swf2go.com/wiki/Adobe-Flash-Lite-Ver

    Best,

    // chall3ng3r //

    P.S. you can call me chall3ng3r or Faisal… no need for double-slashes… it's just kind of unique signature :)

  8. Hi,

    I have version 9,1,123,0 installed on my device N97 mini. Also tried with N97 and same Flash Lite version.

    The code for loading images is in the loop with loader.loadClip(“http://127…”, image_mc), loader is MovieClip.There is also loadHandler which calls function for resizing image when onLoadInit occurs. If using this code, there is only first image shown on Stage.

    But, if i use another approach, loading one image completely and than load another image, all images are loaded well. But here is one ugly thing, for loading five 10KB images from local http server, it takes more than 5 seconds!

    And one more thing, if i use first approach but loading images from Ethernet IP (http://10.10.1.100:8888/…) of my device, all images are loaded in less than a second.

    BR,
    Simon

  9. Hi,

    Simon, maybe this is some bug in FL. It have many as I told you before :)

    Now you need a workaround to get your desired results. FL only allows five loading operations at a time, and it's working for you when you load via external IP.

    You can try adding small delay, maybe 100-300ms between your loadmovie calls. You can do it via setInterval function, or better use frame based loop. I your SWF is compiled with 21 FPS, you might use 5 or 6 frames for looping. And on every iteration, load a movieclip.

    Give it a try and let me know how it goes. I will try to make a sample for you if I manage to get some spare time on the weekend.

    Good luck!

    // chall3ng3r //

  10. Hi,

    My application uses only 1 frame and it is compiled 24 fps. It would be very helpful if you could send me a sample of how to load images in 5 frames, because i am new in Flash developing. Meanwhile, I will try this myself :)
    Another question is about loading images when stub application is installed on E: drive (memory card) and swf is located in E:privateUIDapp.swf. The problem is, that images are not loaded when installed on memory card. No error message is returned. crossdomain.xml is not triggered. If the application is installed on C: (phone memory), all images are shown. Of course with slow approach (loading one image completely and than load another image).
    The question is also opened here (http://sajisoft.wordpress.com/2010/03/28/flash-…).

    Thanks in advance,
    Simon Himmelreich

  11. Hello all. I'm having a problem with fscommand2 and fullscreen focus. What exactly do you mean when you say “Calling the swf directly from within the HTML “

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">