Deprecated: Return type of I::current() should either be compatible with Iterator::current(): mixed, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/public/kirby/toolkit/lib/i.php on line 62

Deprecated: Return type of I::next() should either be compatible with Iterator::next(): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/public/kirby/toolkit/lib/i.php on line 91

Deprecated: Return type of I::key() should either be compatible with Iterator::key(): mixed, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/public/kirby/toolkit/lib/i.php on line 71

Deprecated: Return type of I::valid() should either be compatible with Iterator::valid(): bool, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/public/kirby/toolkit/lib/i.php on line 101

Deprecated: Return type of I::rewind() should either be compatible with Iterator::rewind(): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/public/kirby/toolkit/lib/i.php on line 53

Deprecated: Return type of Collection::count() should either be compatible with Countable::count(): int, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/public/kirby/toolkit/lib/collection.php on line 80

Deprecated: parse_str(): Passing null to parameter #1 ($string) of type string is deprecated in /home/public/kirby/toolkit/lib/url.php on line 135
One Tap Less | Buffer's clumsy implementation of x-callback-url

Buffer's clumsy implementation of x-callback-url

You may not know Buffer, but you're certainly in touch with it daily. It is a service to schedule posts into multiple platforms people often use that to send tweets to App.net. I use Buffer often to share posts I stumble across the web. There's probably a Buffer post in one of the streams of your favorite social network right now. Well, I got a hint on Twitter that Buffer for iOS had a url scheme for x-callback-url, so I gave it a spin.

Buffer is a terrific service, however, interacting with it directly from iOS is painful. I was about to grab their API and create a Python script so bad it is1. The web interface is broken on mobile and the iOS app is buggy, still on iOS 6 and the platform has no iPad support. There is no documentation for Buffer's x-callback-url support, although its inclusion was hinted by a blog post from one of its developers last year.

Therefore, I must advice you this url scheme is probably still under tests and its clumsy behavior is the one you should expect from any implementation under development. Don't even think of reaching their support with queries on this matter or giving them a poor App Store review. Cut them a slack and let them fully develop this feature we appreciate so much.

So you're warned, use the following bookmarklet at your own risk, the app may crash once in a while but there's no other harm. This bookmarklet2 creates a new entry on Buffer from the current Safari window. After you confirm or cancel the post, it gets back to the Safari page.

javascript:window.location='bufferapp-x-callback://?t='+encodeURIComponent(document.title)+'&u='+encodeURIComponent(location.href)+'&x-success='+encodeURIComponent(location.href)+'&x-error='+encodeURIComponent(location.href)

The first thing to notice is that the url changes from bufferapp:// to bufferapp-x-callback:// and that it supports the x-source, x-success and x-error parameters. The other tags still the same, t for your post text and u for your post url. After you trigger the action, you'll find out that Buffer won't leave the entry window after applying the x-callback-url parameters, therefore, to access your schedule you must kill and reopen the app. Also, notice that your cancel button disappeared, but tapping on its remains works as expected.

Again, this is certainly experimental and we must assume the Buffer development team will improve the feature over the next batch of updates. Let's hope they use the correct syntax at least.


  1. My mobile workflow with Buffer is only viable because of Riposte, Reeder and Mr. Reader

  2. Read this if you don't know how to create a bookmarklet: add any page as a regular bookmark, that's on Safari's Share menu. Then in your Bookmarks, edit the bookmark you just added, change the title as something that recalls the workflow and paste the javascript in the url field.