Android App Coming? & Is there an API?
Are you planning to write an Android (Google Phone OS) application for OtherInbox? If not, do you have an API I could use to write one myself (if not, would you take issue with me figuring out and using your internal JSON API to write it?)?
8
people like this idea
I like this idea!
Tell me when this idea gets some attention.
The more people who like this idea, the more it gets noticed.
The more people who like this idea, the more it gets noticed.
The company implemented this idea.
-
Inappropriate?We're all based on JSON so it should be pretty easy. If you're willing to create the app, I'd rather spend our time documenting the API for you. Let me go figure out how long this will take and I'll get back to you.
I’m thankful
-
Inappropriate?Thanks! I'd love to write the app and look forward to hearing back from you
I’m excited
-
Inappropriate?We wrote our iPhone website (coming soon) using Dashcode and the JSON API so I think it should just be an issue of documenting it.
I’m confident
-
Inappropriate?I'll get started writing the UI and notification service now, then add the working back-end once the API is documented
-
Inappropriate?I finally got a chance to start on this today, so I decided I'd post some screenshots of my progress so far on the GUI (these are of a live app, not mock-ups). I'm just using the graphics/icons from the OtherInbox website for now so I don't have to create my own, but if you'd prefer, I can replace them very easily.

PS. I compressed the screenshots so they are not at full resolution (the g1 is actually 320x480), and the data displayed in them is fake, as the app does not yet have a backend using the JSON API.
I’m happy
-
Inappropriate?That looks great! I can't wait to try it out on my new G1. Can you post the instructions here or send them to help [at] otherinbox.com?
I’m excited
-
Inappropriate?Are you wanting to download a copy of the program to try it out? It's not useful in any way at the moment (it just prints out a fixed array of data I have in a constant), but if you are just wanting to see what the UI looks like on a real G1 I can mail you the APK (g1 application file) and instructions how to install it.
-
Inappropriate?Here's a screenshot of what I have so far for the email list.
I've also added menus to all of the screens, so I have the menu currently showing in this screenshot. At the moment, I'm using Android style icons (used by the main android Email client) rather than the colorful icons used on the OtherInbox site, but I haven't decided which I'm going to go with yet.

I'm uploaded what I have so far of the application to my website, so you can download it and try it out.
INSTRUCTIONS
--------------------------
1. From the Home screen on your device, press the physical menu button
2. Press "Settings" (on screen)
3. Scroll down and press "Applications"
4. Click to check "Unknown Sources (Allow install of non-Market applications)"
5. Return to the Home screen (press the physical home button)
6. Open the built-in browser
7. Press the physical menu button
8. Press "Go to URL" (on screen)
9. Enter "www.souvey.com/otherinbox.apk" and submit
10. Follow on-screen instructions
README
------------------------
- The application does not actually connect to OtherInbox. It uses a combination of hard-coded and randomly generated data, so the data will not make sense.
- Both portrait and landscape mode are working for all accessible screens
- Any unimplemented features (most buttons) will bring up a pop-up stating they are not done yet
- The physical back button should work as expected on all screens (although it is not rigorously tested)
- All screens (except the login screen) have a menu accessible with the physical menu button. Most buttons do currently work, but a few navigation related ones do.
- The icons in the folder list are currently just taken from the OtherInbox website. They are therefore low resolution and will appear blurry on Android's high-res screen.
- All screens should be usable with both the trackball and the touchscreen
-
Inappropriate?I'm going to be on vacation all week for Thanksgiving, so hopefully I'll be able to finish up the front-end, as I might actually have some free time (although I have another already released Android application I will be working to update as well). I'll still be checking this thread and my email the entire time and will be sure to post updates as soon as I can (current update: I haven't even had a chance to touch the code since my last post :P)
-
Inappropriate?Didn't end up getting much of a chance to work on it... I spent most of the time on my android music app finishing up the piano, but now that I've got a beta of that out, hopefully people will stop sending me emails and complaining that there isn't a piano and give me some time to work on this :P
I’m sad
-
Inappropriate?As is probably clear at this point, I had to abandon this project for the sake of time (my other Android application got far more attention than I was expecting and sucked up all my time). I would still really like to get this working though, as I am still unable of checking my OtherInbox account on my phone (the IMAP doesn't seem to work very well--both server and client).
I have the next 5 days or so free (for the most part--there are always things to do), so I'm going to try and spend a little while getting this application in a usable state so I can use it and release it for anyone else who would like it.
I'm going to start out my essentially just making it a native frontend to the OtherInbox webpage (therefore it will require an internet connection and will not have notifications). If enough people download it, then I will continue to devote some time to it, and if not, at least there will be a way to use OtherInbox on Android (even if it isn't as elegant as it could be).
I'm going to try and reverse-engineer the iPhone version to figure out the API, which I expect will have very simple javascript, but I will contact you if I run into any difficulties.
Sorry I had to let this project slip through the cracks :(
-
Inappropriate?Yeah, I have a G1 and I'd really like to see something like this going. This is currently like 100x better looking than the default Gmail app.
I’m hopeful...
-
Inappropriate?Glad to hear you are looking forward to it. I currently have sign-in and folder listing working successfully. I hope to get mailbox listing done tonight, and then viewing (and possibly writing, though i don't know) messages done tomorrow and semi-finalizing it. Unfortunately, OtherInbox's server is having some issues right now, so development is slow :(
I’m happy
-
Inappropriate?I'm going to bed for the night, but I have finished viewing the folder list, mailbox list, and message list (all correctly linked to OtherInbox's server). I'm heading off to bed, and I'll try and finish the rest tomorrow.
I’m confident
-
Inappropriate?Oh, I was going to ask. Is anyone on the OtherInbox team willing to send me some just slightly higher resolution images of the mailbox icons (Inbox, Trash, Saved, etc). The high density of the G1 screen means they have to be very small at their current resolution (or very blurry).
I’m hopeful
-
Inappropriate?csvy, yeah, I'd love to help in any way. This is so cool!
Unfortunately we don't have any higher res icons than what are in the sprite file you're already using.
The iPhone app uses an old version of the API which we'll be removing as soon as we get our new app in place. You should look at the web client for an example of the new API.
I'll give you a quick overview here; if you need more information I'll post something to our blog and link it here.
It all starts with the http://my.otherinbox.com/refresh?adva... You GET that URL with a few different query parameters to get different parts of the OIB object graph.
- Advanced=true is what turns on the new API. You should always use this.
- To get the initial list of folders, pass type=startup. For speed, this refresh also returns the mailboxes in the Inbox folder and the messages that belong to the first mailbox in the inbox folder.
- To get the mailboxes inside of a folder, add folder_id=GUID. GUID 1=Inbox, 2=Saved, 3=Deleted, 4=Sent, 5=Blocked. You'll get back compound GUIDs, because the same mailbox exists in different folders. So mailbox 15043 in the Saved folder will be returned to you as "2-15043".
- To get the messages inside of a mailbox, add mailbox_id=COMPOUND_GUID. These messages include a property called 's3_html_url'. This is a query string that allows you to access the processed version of the message in the AWS S3 service.
- The API includes more advanced features to allow you to only request parts of the graph that have changed; when you get farther along I can explain those, but it involves keep track of the last time each folder and mailbox was last updated by the server, then passing "mailbox_updated_at" and "folder_updated_at" back with subsequent requests. If you do that, you only end up fetching objects that have been created, changed, or deleted since your last request (and the server response is faster because we can do less work to satisfy your request)
1 person thinks
this is one of the best points
-
Inappropriate?Someone managed to cut all of the fiber optic cables running to South Bay (in California), so my city is currently without internet, phone (even 991! yikes!), and cell reception. I'm spending the night at a friend's right now who is not in the affected area (thus me being able to reply to this), but I won't be able to finish this tonight as I intended (since my phone doesn't have any cell reception still). Hopefully the problem will be fixed by tomorrow (they claim they will have the cables spliced back together by tonight). Someone is SO getting fired for taking down an entire city :)
I do remember one question I wasn't sure about from last night (though I didn't get much of a chance to look into it, it's probably easier just to ask). How are emails marked as read (both the Mark All As Read, and reading individual emails)? -
Inappropriate?Yeah, i heard about the fiber optic cable thing. Apparently, they were just random vandals.
If you get me any of the lower quality sprite images you have, I can try my best to vectorize them so you can upscale them to larger sizes while still maintaining quality. -
Inappropriate?Were the icons not originally in vector format?
-
Inappropriate?Well, assuming that they don't have higher resolution ones available, I'm assuming not. Or maybe they just don't have access to the original vector files...
-
Inappropriate?The sprites are located here: https://beta.otherinbox.com/app/OI/en... (they are the 5 lower down that are used for Inbox, Saved, Deleted, Sent, Blocked). If there really aren't originaly vectors, I could convert them myself, but if you are wanting to help, I certainly would appreciate it.
-
Inappropriate?csvy, emails get marked as read by HTTP PUT (simulated as a POST with a "method":"_put" parameter like Rails does) with body parameters of the message ID and "unread=true". The POST goes to messages/batch_update. If you do "mark all as read" you'll see a different version post to /mailboxes -- this lets you mark all of the messages in a mailbox without having to specify each message ID
-
Inappropriate?Is there a json method using the advanced API that only returns a list of Folders (but not all the additional stuff like type=startup). Because panels are all on separate screens on the mobile app, using type=startup will make it much slower, not faster (since it doens't need all that information right away). I was previously just using /refresh, which returns such a list, but you said that the non-advanced API is deprecated. Just appending advanced (/refresh?advanced=true) results in an internal server error. Is there a "type" parameter to list the folders? Thanks!
Progress update (for anyone following): I just rewrote my java OI JSON client to be faster and have nicer error handling. The login code is all rewritten and runs much much more quickly (although it is still slow when you get your password incorrect, which I don't think I will fix). I also fixed rotation, so that rotating the device works cleanly throughout the app (and doesn't cause any issues with downloading data, which is now isolated in its own thread Finally, I did some general UI tweaks and cleanup, including a much better looking landscape view on the login page (picture included below--portrait version is still about the same as screenshot further up, but with a few tweaks--larger button, etc)
It's coming together... :)
I’m confident
-
Thanks for your efforts CSVY - I can't wait to try it out on my G1! -
CSVY, that makes sense; unfortunately we don't yet have a refresh type like that. I think it's safe to use non-advanced refresh for now, but only for this one case. When we get rid of non-advanced refresh we can pretty easily add support for folder-only refreshes. Sounds like it's really coming together! -
Inappropriate?In your post, you mentioned that the PUTs (manifested as POSTs) go to " messages/batch_update" or mailboxes/batch_update. However, based on how the web-based version works, it appears as though everything goes to /batch_update. Is this the new advanced API (that has deprecated the one you sent, possibly?). Pressing the mark as unread button, for examples, sends the following parameters to /batch_update: advanced, authenticity_token, folder_updated_at, mailbox_id, mailbox_updated_at, message_ids, read, tag, user_updated_at, & version. Are these really all needed (particularly authenticity_token & version, which I have ignored thus far)?
Thanks!
P.S. Is there the API I described above for the getting just the folders?
I’m confused
-
CSVY, you're right, I was referring to an older style. Block All is the only action that goes to a different URL; that goes to '/mailboxes/#GUID/state_change.json'
The updated_at times are not needed if you are not using the differential refreshes that I described earlier. But if you don't send them, the server will assume you want a full refresh of the mailbox and folder you are currently viewing. Version is not required but would save us lots of troubleshooting headaches -- we'll come up with a convention later, but use something like "G1APP-xxxxxx" where xxxx is a version number meaningful to you.
authenticity_token is important to send with every POST to our server as we are gradually going to be getting more strict about its use. That's a security feature. You can obtain it by calling the URL /auth-token.js -
Inappropriate?I just finished an Alpha build which I have published to my website.
Based on my limited testing, I believe it works completely for reading emails.
However, it is currently READ-ONLY. No data is posted back to OtherInbox (since I am still waiting on some API details). Emails will not be marked and read when you open them, and any button that is not read-only will produce an "Unimplemented!" popup. Nevertheless, it should be completely usable at this point for reading emails.
If you would like, please download and try it out, and let me know whether it works. Any feedback would be appreciated. Nothing is set in stone.
Notes: I seemed to be getting a lot of timeout connection errors while using it, but I have also been receiving many on my desktop as well. Let me know if you have connection issues--I'm not positive whether they are due to my app, my connection, or OtherInbox.
Installation Instructions:
-----------------------------------
1. From the Home screen on your device, press the physical menu button
2. Press "Settings" (on screen)
3. Scroll down and press "Applications"
4. Click to check "Unknown Sources (Allow install of non-Market applications)"
5. Return to the Home screen (press the physical home button)
From here you have two choices:
+ Download the file from my website on your G1 using WIFI (due to a bug in the browser, it will not download correctly over T-Mobile EDGE, not sure about 3G)
+ Download the file from my website on your computer, then copy it to your device either over USB, or onto the devices SD Card
Either way, the file is located at http://www.souvey.com/oi-alpha.apk
Note: the final version will go in the Android Market, so installation will be easy
Again, please let me know how it goes!
I’m excited
1 person thinks
this is one of the best points
-
Inappropriate?This is awesome! I don't have an android phone yet, but this will definitely help me justify it when I can get one with my provider (verizonwireless). Thanks for the great work!
I’m stoked
-
Inappropriate?Everything for v1 (doesn't yet include compose/reply/forward/etc) is working except the showing the correct buttons depending on what folder you are in. If anyone is interested, I'll post a beta once I fix those buttons.
I’m happy
-
I can't wait to try the next beta! -
Inappropriate?I have been dog-fooding the app now for the last week to make sure that the beta release is suitable for consumption. I'm hesitant to release it, because I am still getting semi-frequent (enough that it is noticeable) time-out errors, no matter the connection (3g, edge, or wifi). The problem is that I'm unsure whether they are as a result of my application or they are the same server-side time-out errors (502, etc) that I get sometimes on my laptop (and they are somehow more frequent on the mobile device because it doesn't try multiple times like a browser?). I really want to get to the bottom of those before I put it out, but rest assured, I am still working on this.
I’m confused
-
Inappropriate?Things have been delayed by Cupcake (Android 1.5) is rolling out
I had to divert all my efforts to making my existing application compatible and now I can move back to OtherInbox again. I plan to rewrite the threading/communication framework I implemented, using new features available that make it more elegant and stable. -
Inappropriate?Just got back from Google IO (Google's developer conference) and learned a bunch of new stuff about Android (and got a new development device for testing) so I will be able to improve much. Unfortunately I keep having to postpone working on this application to spend time on my paid app, since I plan to release this one for free (mainly because I can't imagine the market share of OtherInbox users with a G1 being all that large :P). It will be released though, and I've been using it myself for a while now.
-
Inappropriate?Is there a version of this app to download yet?
about a week ago, i found one, but didnt work.
I’m confused.
-
Inappropriate?Back again... Although the API has changed enough that nothing works anymore :) Time for a rewrite
-
Inappropriate?I've gotten the application "working" again, but unfortunately, from what I can see, the API is nearly unusable now for a mobile device. It has been heavily optimized for a desktop browser to require the minimum number of HTTP requests. What this means is that the file size of the JSON has increased significantly.
A mobile device is very very different than the desktop client. On the desktop client, the folders, mailboxes, and email are all visible at once, so the API sends them at once. On the mobile application, however, these are each of separate pages. From what I can tell, there is no longer any way to ask for the each of these sets of data separately (which is great for the desktop client, and speeds it up significantly, but horrible for the mobile client, which has an extremely slow and unreliable data connection).
At the moment the application is now unusably slow on a bad connection. Does anyone on the OI Team know if the new API has a way to request specific arrays without all the other information that is useless to the device? -
Inappropriate?Yes I think there's a good work around for this. If you do not pass "type=startup" with your initial request, you won't get all the extra stuff. The only thing you will miss is information about the initial set of folders (Inbox, Saved, etc.) -- but since that rarely changes (has never changed to date actually) you're fine to create those objects on your own.
Then all you have to do to get a list of mailboxes for a folder is pass "folder_id=???" as a query parameter to the /refresh URL. That will return a list of mailboxes belonging to that folder.
To get a list of messages belonging to a mailbox, pass "mailbox_id=####" and "folder_id=###" -- you'll see some duplication between mailbox IDs (which are composite keys) and folder IDs. So for Mailbox 15 in folder 1, you would pass folder_id=1 and mailbox_id=1-15...not ideal but that's how things have evolved.
Let me know if you have more questions, I'm super excited about what you are doing! -
Inappropriate?The problem is that I do need to get the startup initial folders--since it also provides the unread count which I need to display next to the folder
-
Inappropriate?The unread count will come back to you as part of the next refresh -- so if you display all the folders, you'll get the unread count as soon as you request the mailboxes for the first folder. Long term we should make an API for this situation -- I'm just trying to get you going without obstacles.
Loading Profile...



EMPLOYEE

EMPLOYEE