Facebookにアクセス(永続的なアクセストークン)

 ブラウザなどで以下のようなリクエストを送ると、期限がないアクセストークンが返ってくる。

https://graph.facebook.com/oauth/access_token?
    client_id=<YOUR_APP_ID>
   &client_secret=<YOUR_APP_SECRET>
   &grant_type=client_credentials
   
> 応答
access_token=<APP_ACCESS_TOKEN>

これを使えば、ユーザがFacebookにログインしていない状態でもAPIにアクセスしたり、サーバ側で定期的なリクエスト処理を行ったりすることができる。便利!
もしかしてgdata-objectivec-clientでも同様のことができるのかな。

gdata-objectivec-client

 iOSからYouTubeのAPIにアクセスするため、久しぶりにgdata-objectivec-clientを調査していた。以前はユーザIDとパスワードを指定するClientLoginが使えたが、今はOAuth2必須になっているようだ。認証時にログイン・パスワードを入力して権限を確認するダイアログが表示されることになる。TwitterやFacebookのAPIと同じ流れだ。
固定Googleアカウントでログインするようなシステムの場合は、結構面倒。

NSString* scope = @"https://www.googleapis.com/auth/plus.me";
GTMOAuth2ViewControllerTouch* viewController =
[GTMOAuth2ViewControllerTouch controllerWithScope:scope
clientID:@"<ClientID>" clientSecret:@"<ClientSecret>"
keychainItemName:@"<ChainItemName>" delegate:self
finishedSelector:@selector(viewController:finishedWithAuth:error:)];
[viewController setWebDelegate:self];

[self presentModalViewController:viewController animated:YES];

※事前にGoogleでアプリ登録してClientIDとClientSecretを取得しておく必要がある。

Facebookにアクセス(FQL)

 FQLというSQLのような記述を使ってFacebookのデータを検索できる。

NSMutableDictionary* params = [NSMutableDictionary 
dictionaryWithObjectsAndKeys:
@"SELECT post_id,type,message "
"FROM stream "
"WHERE source_id=<ユーザID> "
"AND actor_id=<ユーザID>", @"query", nil];
[facebook requestWithMethodName:@"fql.query"
andParams:params andHttpMethod:@"GET" andDelegate:self];

>>応答
- (void)request:(FBRequest *)request didLoad:(id)result {
NSLog(@"result:%@", result);
}

すごく便利そうだが、FROM句にひとつのテーブルしか指定できない、WHEREでインデックスされたカラムを指定しないといけない、SELECTで*を使えない、などの制約があってなかなか使いどころが難しい。

あとvideoテーブルに正しくデータが入っていないようだけど、不具合なのかな。streamテーブルのtypeを見ても、本来Videoデータには"128"が入るはずなのにnullになってるし。。

Facebookにアクセス

 iOSでFacebookのライブラリを使ってアクセスする処理の例。

【ログイン】
NSMutableDictionary* params = [[NSMutableDictionary alloc]
initWithObjectsAndKeys:
kFacebookAppId, @"client_id", @"touch", @"display",
@"publish_stream", @"scope", nil];
Facebook* facebook = [[Facebook alloc] initWithAppId:kFacebookAppId
andDelegate:self];
[facebook dialog:@"oauth" andParams:params andDelegate:self];
※これはアプリ内でダイアログ表示してログインする場合

【Wallへ投稿(メッセージ)】
NSMutableDictionary* params = [NSMutableDictionary
dictionaryWithObjectsAndKeys:
@"<メッセージ>", @"message", nil];
[facebook requestWithGraphPath:@"/<ユーザID>/feeds" andParams:params
andHttpMethod:@"POST" andDelegate:self];

【Wallへ投稿(YouTube埋め込み)】
NSMutableDictionary* params = [NSMutableDictionary
dictionaryWithObjectsAndKeys:
@"<メッセージ>", @"message",
@http://www.youtube.com/watch?v=XXXXX", @"link", nil];
[facebook requestWithGraphPath:@"/<ユーザID>/feeds" andParams:params
andHttpMethod:@"POST" andDelegate:self];

【Wallへ投稿(Video)】
NSData* videoData = [NSData dataWithContentsOfFile:@"<ファイルパス>"];
NSMutableDictionary *params = [NSMutableDictionary
dictionaryWithObjectsAndKeys:
videoData, @"video.mov",
@"video/quicktime", @"contentType",
@"<タイトル>", @"title",
@"<説明>", @"description", nil];
[facebook requestWithGraphPath:@"/<ユーザID>/videos" andParams:params
andHttpMethod:@"POST" andDelegate:self];

【Wall取得】
NSMutableDictionary* params = [NSMutableDictionary
dictionaryWithObjectsAndKeys:
@"type,description,icon,message,name,application.id", @"fields",
@"100", @"limit", nil];
[facebook requestWithGraphPath:@"/<ユーザID>/feed" andParams:params
andHttpMethod:@"GET" andDelegate:self];
※ fields指定がない場合は、全ての項目を取得

>>応答
- (void)request:(FBRequest *)request didLoad:(id)result {
NSLog(@"result:%@", result);
}

【投稿削除】
[facebook requestWithGraphPath:@"<ユーザID>_<ObjID>"
andParams:[NSMutableDictionary dictionary]
andHttpMethod:@"DELETE" andDelegate:self];

iOS6からは標準実装されるようなので、もっと簡単になりそう。

iOS6

 iOS6で気になったのはコレ。3Dマップ!
これを使ったゲームとか作れたらいいのにな〜。

久しぶりのリジェクト

 先週申請を出したiPhone用ゲームアプリがリジェクトされた。
理由は、アプリ内課金を実装するならリストアボタンを作れ、というもの。
メインの購入画面ではちゃんと購入ボタンとリストアボタンを用意していたのだが、別の画面に購入ボタンだけ配置していた(デザインなどを考慮して)。
以前には無かったチェック項目だ。

QUMARION

 人形入力デバイスで3D CGモデルのポーズ操作ができる「QUMARION」67,800円

ついに発売日が決まったみたい。
これは欲しい!けど気軽に買える値段じゃないな。
先行プレビューユーザの評価が気になる。

加速度センサーをより高度に活用したい

 iPhoneやAndroidには加速度センサーがついていて、端末の傾きや簡単な移動を検知することが出来る。このセンサーをしっかり解析すれば、傾きとは別に3次元の空間座標を認識できて、ゲームなどのアプリに活用できるのでは?と思って調べた。

結論。無理だった。

端末の傾きと移動の成分をどうやっても分離できない。公式サンプル「AccelerometerGraph」でいうところの「Highpass Filter」を移動、「Lowpass Filter」を傾きと見れないこともないが、移動と回転を完全には判別できない。

また、仮に(ジャイロセンサーなどで)判別できたとしても反動の問題がある。力を加えると必ず逆方向への反動が発生する。これが曲者で、加えた力以上の反動があったり小さい反動だったりする。一回の動作なら無視すればいいが、小刻みに動かすと加えた力と反動の成分が混ざってしまうのでそういう訳にもいかない。反動の発生や終わりまで待てば何とかできそうだけど、それでは遅延が発生してしまう。ということで諦めた。




i監視装置をリリース

 iPhoneアプリ「i監視装置」をリリースしました。
iPhoneやiPod touchを監視カメラとして使うアプリです。WiFiで繋がったPCから監視したり、警報を鳴らしたりすることが出来ます。


iPhoneアプリのプロモーション

 おたくのiPhoneアプリを宣伝しますよ、というメールが海外から来た。有料でアプリのプロモーションというもので、その中で気になる項目があった。
download+positive comment+5 stars (2.5$ per one)
2.5ドルでアプリをダウンロードして星5を付けてくれるようだ。

日本のアプリのレビューを見ていると、たまに中身のない短い英文で星5のものがあるが、こういうサービスを使ったものなのだろうか。たまにレビューが荒れて嫌な思いをすることがあるけど、レビューを健全なものにしたいのならば販売側もモラルに反することはすべきでないと思う。

calendar
  12345
6789101112
13141516171819
20212223242526
2728293031  
<< August 2017 >>
selected entries
categories
archives
recent comment
others
mobile
qrcode