タグ別アーカイブ: Mobypicture

【開発ノウハウ】「twicca マルチ画像プラグイン」の不具合修正で分かったMobypictureの微妙な挙動


拙作「twicca マルチ画像プラグイン」は、Twitterクライアント「twicca」に、Twitpicやyfrogなど複数の画像サービスへのアップロード機能を追加するプラグインですが、最近になって画像サービス「Mobypicture」へのアップロードがエラーになるという報告をいただきました。2度のバージョンアップで修正しましたが、同じようなアプリを作っている人に役立つかも知れないと思い、以下に事象の発生原因などまとめてみようかと。

本事象は表面上「Mobypictureへの投稿エラー」という1個の事象ですが、内部的には以下2個の事象が発生していました。

1. Android特定バージョンにおいて、OAuth Echoが正しく機能しない事象
2. Mobypicture APIが仕様通りのJSONレスポンスを返さない事象

以下それぞれについてまとめます。

1. Android特定バージョンにおいて、OAuth Echoが正しく機能しない事象

バージョン1.0.22以前で発生し、1.0.23でフィックスした事象です。

Mobypictureに限らず、Twitterアカウントを用いた他社サービスでは多くの場合「OAuth Echo」という認証の仕組みを用います。これはリクエスト時に認証用の文字列を一緒に送信することでアカウントの認証を行うものです。Mobypictureの場合、HTTPヘッダに「X-Auth-Service-Provider」「X-Verify-Credentials-Authorization」という2種類のパラメータを付加することになりますが、この方法で送信を行った場合、Androidの特定バージョンで

500:Something is broken. Please post to the group (https://dev.twitter.com/docs/support) so the Twitter team can investigate.

のようなレスポンス(要するに500エラー)が返ってきてしまい、画像の投稿が完了できない事象が発生しました。

不思議なことにこの事象はAndroid 2.3系のXperia arcでは発生せず、Android 2.2系のIS03で発生しました(エラー報告をメールでいただいた人の端末もAndroid 2.2系でした)。一方、全く同じようにHTTPヘッダーに認証用文字列を与えている他の画像サービスではIS03でも正常に投稿が完了しました。以上から本事象は、OSのバージョンとMobypicture・Twitter側の処理の微妙な食い合わせに起因する事象と推測されます。

対処として(対処療法的ではありますが)MobypictureではOAuth Echoの認証文字列を「HTTPヘッダでなくPOSTのパラメータで送る」ことができるので、そのように変更したところ認証が正常に機能するようになり、画像投稿が可能になりました。

2. Mobypicture APIが仕様通りのJSONレスポンスを返さない事象

バージョン1.0.23以前で発生し、1.0.24でフィックスした事象です。

1.0.23で事象1を修正してMobypictureへの投稿は問題なくなったはずだったのですが、最近になってまた投稿できないというTwitterでのツイートがちらほら見られるようになったので調べてみたところ、Mobypicture APIの返り値がひっそり変更されているのを見つけてしまいました。

MobypicuteのAPIドキュメントによると、投稿に成功した時に戻ってくるJSON文字列は以下のように規定されています。

{
    "media":
    {
        "mediaid":"6646300",
        "mediaurl":"http:\/\/moby.to\/9i8xe1"
    }
}

しかし11/26現在、実際に戻ってくるJSON文字列は以下のような形式です。

{"mediaid":11335890,"mediaurl":"http:\/\/moby.to\/htmgwh"}

APIドキュメントの仕様では「media」の子要素として「mediaid」「mediaurl」が配置されているのに対して、実際に戻ってくる文字列では「media」がなく、いきなりルート要素に「mediaid」「mediaurl」が配置されています。従来のプラグインは当然APIドキュメントのようなJSON文字列を想定しているので、実装が正しくJSON文字列を解釈できずエラーになっていたというわけです。

対処としては、JSON文字列がAPIドキュメント通りの形式・現状の形式のどちらであっても正しく解釈して画像URLを抽出できるように実装を修正しました。そのため現状のJSON文字列形式が実はMobypicture側の不具合で、将来的にAPIドキュメント通りの形式に戻ったとしても、再び不具合になることはないはずです。

—-

どうやら上記2点の修正により、旧版でエラーになっていたユーザー様も最新版(1.0.24)ではMobypictureでの投稿ができるようになっている様子です。Mobypicture側でなにかインフラの更新を行なっているんでしょうかね? 微妙な挙動変化が気になります。

ネットサービスと連携するアプリはネットサービス側の挙動が少し変わると機能しなくなってしまう(しかもユーザー様には「アプリが動かない」という見え方をする)リスクを根源的に抱えているわけで、連携するサービスの数が多ければ多いほどそのリスクは増大するわけで、そうやって考えると「twicca マルチ画像プラグイン」はなんてリスキーなアプリなんだろうと今さらながら思います。休暇の戯れで気軽に作ってしまったアプリですが、そのメンテナンスは修羅の道かもしれませんねw。

あ、もちろん今後も(個人で出来る範囲で)メンテさせていただきますので、ユーザー様においては安心してお使いいただきたく存じます。