ブログランキング・にほんブログ村へ


iPhone/iPad用潜水艦ゲームアプリ ソナーエコー iTunesにて公開中

2012年08月22日

AndroidからFacebookのWallにpostしようとして#200エラー

Android用のFacebook SDKをダウンロードしてきて、APIキーとかハッシュとか登録して、アプリ認証、プログラムから投稿…とするとエラー。

具体的には
#200 The user hasn't authorized the application to perform this action.

Facebookのアカウントからアプリを確認すると、アプリ自体は認証されている。

投稿のところのプログラムはだいたいこんな感じ。

String response = mFacebook.request("me");
Bundle parameters = new Bundle();
parameters.putString("message", _string );
parameters.putString("description", "post by test program");
response = mFacebook.request("me/feed", parameters,"POST");

認証のところで何を許可してほしいのか?を記述する必要があるらしい。
SDKのサンプルのLoginButton.javaの中をみると

mFb.authorize(mActivity, mPermissions,new LoginDialogListener());

とかなっているけど、これのmPermissionに

String mPermissions[] = {"offline_access","publish_stream"};

って感じで与えてやったらうまくいった。

offline_accessってのは認証で得られるトークンの寿命に関係があるみたい。
publish_streamが今回の肝心な部分で、投稿の許可を求める。
posted by みこあいさ at 19:47| Android開発

2012年07月24日

Twitterのapiが401エラーを返しまくる

Androidでやったけど、プラットフォームは関係ないと思われる。

AndroidでTwitterにつぶやきを投げろと。
しかもIntent使わないで。

Twitter4j使えばいいでしょ、サンプルもいっぱいあるし。Facebookよりは素性よさそうだし…



そんなことなかった。

oauthが

401:Authentication credentials (https://dev.twitter.com/docs/auth) were missing or incorrect. Ensure that you have set valid consumer key/secret, access token/secret, and the system clock is in sync.


とか出しまくり。

Twitter4jがなんか問題あるんかとsignpostも試したけど

Authorization failed (server replied with a 401). This can happen if the consumer key was not correct or the signatures did not match.


こんなの出しまくり。

サンプルコードも色々当たって見たけどどれでも同じ401。

情報を探してまたぐぐる旅に出たけど、
やれ、デバイスの時計を合わせろだの、文字列をセットするのにほにゃららしろだの、果てはコンシューマキーを確認しろだの、アプリをread and writeにしろだの、そんなとことっくに見たって!って情報ばっかり。


2日以上悶絶して見つけたのがこのブログ記事。なんとこの種の情報源として珍しく我が国。


TwitterのOAuthでrequest tokenを取得しようとして401 Unauthorizedがでるときの原因と対処法3つ


アプリの設定画面のCallbackURLに何も入力されていない



まさにこれ。
中身はなんでもいいから適当に入れろと。

いれてやろーじゃないか実在しないURL。(ただしURL書式的には正しいもの)


そしたら


動いた!動いた!クララが動いた!




Twitterの開発者画面のアプリ登録のところが結構仕様が変わってるらしくて、ネットで見つかるほとんどの情報が現状と合ってないんだけど、それらの中でoauthを使う場合アプリを「ブラウザアプリに設定にしろ」ってのが何度も出てくるのに、現状のアプリ設定にはこの項目が存在していないのが少しひっかかってた。

現在はCallbackURLに文字列を入れることで、「ブラウザアプリ」のフラグが立つのだと思われる。




疲れた…




他人の気分次第の仕様を探し当てるのって「技術」っていうのかなぁ…
posted by みこあいさ at 20:43| Android開発

2012年07月17日

9patch pngをImageButtonに使う

Androidで、大きさが端末や状況によって確定できないんだけど、とにかく横幅の半分の幅のボタン、しかもイメージで、ということもある。

そういう時に元イメージを出来るだけ尊重する形でリサイズしてくれるフォーマットというのがある。

9patch png。
長くこの世界やってる人なら同じ動きのものを自作したことは数えきれないくらいあると思う。

ようするに、ビットマップを#状に3x3に分け、中央と4つ角はリサイズせず、中央区画の上下左右のみ伸ばしてやるという仕組みだ。
こういう仕組みが共通フォーマットとして存在していたことを今の今までしらなかった。

で、その作り方なんだけど。

Androidのことを書いてあるところを参照すると、たいてい SDKのtoolsのdraw9patchってツールを使え、と書いてあって終わってる。

んで使ってみる。

まぁ激しくやる気がなく予算をビタ一文出す気がないツールってのは、いつものことなんでまぁとりあえず置いとこう。

だがこれはいけない。
ImageButtonというのは、pressed,focused,selected,標準状態と色々な状況のビットマップを用意するのに、4つ角の幅をビットマップ間でで共通化する方法がない!

そうするとどうなるか、WYSIWYGとやらで目見当で打たれた位置を使って9patchするので、当然のようにボタンをpressするたびにボタンのラベルがあっちいったりこっちいったり。

これは使えん…。
9patchのフォーマットってのを調べて、4つ角の情報をコピーするしかない…exif…いやpngの付加情報ってどうやって読み書きするんだ?

しかし…これで困ってる人のページが全く見つからないのはどういうことなんだ?

不思議に思って調べてみたらわかった。

9patch pngフォーマットというのは、元の画像を上下左右に1ドットずつ広げ、4つ角にあたる点に黒い点を打ってある、ただそれだけのフォーマット。拡張子を .9.pngにするという必要はあるが、情報が付加されているはずなのに、どうしてこの拡張子でないと見つけられないのか妙だと思っていたらこういうことか。


つまりこれでOK。

半信半疑ながら組み込んでみるとちゃんと機能した。

これなら慣れてる普通のグラフィックツールのレイヤを使って簡単に4つ角を合わせることが出来る。

使いにくい余計なツールは必要なし。



しかしこのフォーマット、あまりにやっつけフォーマットすぎじゃないかね。
posted by みこあいさ at 17:16| Android開発