仕事でAir for ios/Androidでアプリを制作していました。
このアプリでTwitter投稿機能を実装したのですが、いろいろ試行錯誤したのでメモ。
== アプリ登録をして、OAuth認証するつぶやき方 ==
きちんとOAuth認証する方法です。
https://dev.twitter.com/で、アプリ登録をして、
・Consumer key
・Consumer secret
を発行してもらいます。
Airのみで認証を通すのはかなり大変そうだったのでライブラリを使います。
⇒Tweetr(http://wiki.swfjunkie.com/tweetr)
アプリ内でStageWebViewを生成、それを受け渡して認証ページを展開します。
取得したConsumer keyとConsumer secretはAOuth.asにセットします。
こちらの記事が大変参考になりました。
http://blog.appforandroid.info/?p=411
実行してTwitterのID/PASSを入力すれば、上記Blogの参考ソース
//OAuthが終わったらTweetrでやりたい放題できます。
のところまで行きつくはず。
ただしtweetr.updateStatusでつぶやいてみたところ、
日本語を含む投稿がエラーになる。
これはTweetr.asの1893行目escape(value);を、escapeMultiByte(value);
にしたところ解決、と思いきや記号『.』を含んでもエラー。
よく分からないが、自前でデコードしてやる。
そこらへんのコード。
[as3]
private function strEscape(value:String):String
{
if (_oAuth)
{
/*元記述
var str:String = escape(value);*/
var str:String = escapeMultiByte(value);
str = str.replace("%2E", ".");
return str;
}
return value;
}
[/as3]
もしかしたら『.』以外にもダメなのがあるかもしれない。
そのあと下のつぶやき方法に変えたので検証不十分、申し訳ない。
== AOuthなしでつぶやく ==
今回特定の文言を入力欄にいれた上で、自由に改編・付け足ししてつぶやいてもらうだけ、
別にその人のフォロワー取ってくるわけでもなし、アプリ内に自前で入力フィールド作るのも面倒、
よくある文言付きでTwitterにリンクするのをStageWebView内でやればいいんじゃないかと。
[as3]
package
{
import com.swfjunkie.tweetr.Tweetr;
import com.swfjunkie.tweetr.oauth.OAuth;
import com.swfjunkie.tweetr.oauth.events.OAuthEvent;
import flash.media.StageWebView;
import flash.events.ErrorEvent;
import flash.events.Event;
import flash.events.LocationChangeEvent;
import flash.geom.Rectangle;
import flash.display.Sprite;
public class TweetMain extends Sprite
{
private var tweetr:Tweetr;
private var webview:StageWebView;
public function TweetMain()
{
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
}
private function init(e:Event = null):void {
removeEventListener(Event.ADDED_TO_STAGE, init);
//StageWebView用意
webview = new StageWebView();
webview.addEventListener(LocationChangeEvent.LOCATION_CHANGE, pageChange);
webview.addEventListener(ErrorEvent.ERROR, pageError);
webview.stage = this.stage;
webview.viewPort = new Rectangle(0, 0, 640, 960);
//入力欄に入れておきたい文言をクエリで
var url:String = "http://twitter.com?status=" + "hogehoge" + " %23ハッシュタグ";
webview.loadURL(url);
}
private function pageError(e:ErrorEvent):void
{
//ページエラー
}
//つぶやき完了URLを判定してStageWebView閉じる
protected function pageChange(e:LocationChangeEvent):void
{
if(e.location == "https://mobile.twitter.com/" || e.location == "https://twitter.com/" ){
webview.stop();
webview.dispose();
webview = null;
}
}
}
}
[/as3]
これで勝手に個人認証ページが挟まって、アプリ内からつぶやくことができる。
注意点としてはページ遷移をする度URLを監視して、つぶやき後にStageWebViewを破棄する部分。
iPhoneや多くのAndroidでは、
https://mobile.twitter.com/
に飛ばされるのだが、最近発売されたAndroid4.0機種では、
https://twitter.com/
に遷移する。
その分リダイレクトが一回多いらしくStageWebViewをstop()しておかないと、
破棄してからページを開こうとしてブラウザを立ち上ようとするという現象が起こった
以上。
