2013/06/30

[javascript][iOS][mobile safari]アドレスバーを引っ込める方法

最近、スマホサイトでページが表示されたときにアドレスバーが自動的に上にいくようになっているんだけど、あれはどうすれば実現することができるのだろうか?

スマホサイト制作:URLバーをページ読込み完了時に引っ込める方法」によると

window.scrollTo(0,1);
と実行すればいいようだ。

ただ、Zepto.jsはscrollToメソッドをサポートしていないようなので、ネイティブで書く必要がありそうだ。

これ知っているか知らないかで、ユーザビリティーにおいてものすごい差を生みそうだ。

2013/06/29

[本]起業家ジム・クラーク

読了
起業家ジム・クラーク
起業家ジム・クラーク
ジム クラーク オーウェン エドワーズ

第1部 離陸―1995年・夏
第2部 軌跡―1994年・冬
第3部 創造と衝突―1995年・春
第4部 光の中へ―1995年・春/夏
エピローグ

via:目次
どうして本書の存在を知ったかは、忘れてしまったけど、読んでみて非常におもしろかった。

ネットスケープ社を立ち上げた当初は、ネットスケープを作るつもりではなく、違うものを手がけようと企てたが、結果的にすべてうまくいかず、マークアンドリーセンがモザイクを作っていた経験から最終的にブラウザを作って成功をおさめたということ。とりあえず会社をはじめました的な発言をたまーに見かけるけど、それと同じように見えて実は違うというところか。気をつけたいですね。

10年以上も前に任天堂アメリカにオンライン事業の企画を提案していたってことは、だいぶまえから任天堂は、ネット業界に参入しようと思ったらできたってことで、今のスマホに押されている状況を考えるとなんだか、感慨深いものがある。

ネスケリリース当初、確かに、ブラウザ占有率は高かったが、OSがMicrosoftに独占されていたので、営業上不利になり、わずかばかりだったIEが最後に市場を独占してしまったこの教訓は、胸に刻み込んでいたい。

マネージャーや経営者も色々なタイプがいて、働く業界や業種によって発揮できるパフォーマンスが違うので、十分に気をつける必要があるということ。
本書でも出てきたが、apple社の社長になったジョンスカリーがその典型例。

appleが危機的状況に追いやられなんとか生き延びた的なことが書かれていたが、この数年後、iPod、iPhone、iPadを引っさげて復活することを想像しながら読むと、著者の知らない未来を知りつつ読めてそれはそれで面白い。

出版されて13年近く立つが、事業戦略的なこれらのものの考え方は現在も適用できる部分もあると思うので、応用して活かしていきたい。

余談だが、最初に創設したシリコングラフィック社のソフトは映画ジュラシック・パークで使われたって初めて知った。
ジュラシック・パーク アルティメット・トリロジー  [Blu-ray]
ジュラシック・パーク アルティメット・トリロジー [Blu-ray]
かれこれ、20年ぐらい前に映画だと思うのだが、すごく懐かしい。

2013/06/28

[本]稼ぐ「デザイン力!」―経営者・管理職のためのデザイン戦略入門

読了
稼ぐ「デザイン力!」―経営者・管理職のためのデザイン戦略入門
稼ぐ「デザイン力!」―経営者・管理職のためのデザイン戦略入門
大口 二郎

稼ぐ「デザイン力!」
稼ぐ「デザイン力!」(kindle版)

第1章 経営戦略とデザイン
第2章 企業体質とデザイン
第3章 時代とデザイン
第4章 デザインを理解する
第5章 自社のデザインを強くする
第6章 未来を提案するデザイン
第7章 コンセプトとデザイン

via:目次

app storeでアプリとして販売されており、かつ85円という魅力的な金額だったので、衝動買いしてしまいました。

スマホで読むせいかどうも、ページ、ページ、読む間隔があいてしまい、今となってはあまり覚えていない。

覚えていることは、他の本でも言われていることだと思うけど、デザインをデザイナーだけに任せずトップも参加しろよ、ということ。
単純なんだけど、本になっているということは、それだけ疎かになっているというところでもあるんだなーっと再認識できた。

2013/06/27

[本]改訂第5版 JavaScript ポケットリファレンス

前回の4版を購入してから、かれこれ5年ぐらいの歳月が経過し、最新版を購入しました。
改訂第5版 JavaScript ポケットリファレンス
改訂第5版 JavaScript ポケットリファレンス
古籏 一浩

前回と大幅に違うところは、Netscapeがなくなり、HTML5関連の機能が増えたところかな。
(さすがに、このご時世、Netscapeは使わんだろ。)

さらにスマホ(iOS4.3以降とandroid2.2以降)に実装されているJSも網羅されていて、痒いところに手が届く感じで素晴らしい。

各項目を見ると、スマホはメジャーバージョンしか書かれていないのだが、「本書の見方」というところに対応しているマイナーバージョンが記載されていた。

今後は、スマホ向けのJavaScriptの実装が増えてきそうなので、ググる前に、本書で調べてからプログラムを組むことにしたいと思う。

目次のところで機能一覧が掲載されているので、素早く調べることができて無茶苦茶便利なんですよね。
そのスマートさは、今回もやはり受け継がれています。

やはり手元に置いておきたい聖書ですな。

2013/06/26

[javascript][jQuery]画面切り替わり時にメッセージ出力 その2

大分前に「javascript:画面切り替わり時にメッセージ出力」というエントリーを書いたのだが、再度、これを見返してみて、まったくやり方がわからなかったので、もうちょっと詳細に書いてみる。

$(window).on('beforeunload',function(e){
  return e.returnValue = 'ここにテキストを入力';
});
参考URL:ページを移動する前に確認メッセージを表示する

jQueryを使う分、ちょっとコードが減ってより簡易に処理を書くことができるのかなと。

2013/06/25

[JavaScript][Zepto]OSを判定する

zepto.js」を使って端末のOSを判定することはできないだろうか?

具体的にいうと、iOSかandroidのどちらかがわかればいいのだが。

Detect moduleを読むと下のようなやり方で判定できるようだ。

$.os.ios
$.os.android
マニュアルによると、上の値を使って判定を行う場合は「!」を二つ使ってくれと書いてある。つまり、こう。
!!$.os.ios
!!$.os.android
jQueryだとブラウザ判定とかデフォルトで入ってないんだけど、このライブラリはそれが入っているから便利だなと。

2013/06/24

[jQuery]CSSプロパティ値を削除する

もともとデフォルトでは値が設定されていないが、jQueryを使ってCSSを設定した時、後々、CSSの値を撤去(削除)したいなーっと思ったらどうすればいいのだろうか?

jQuery CSSの値を削除 ~ プログラムのメモ」を読むと空を設定すればいいようだ。

つまり、こんな感じ。

$('.hoge').css('height','');
これは便利だから覚えておきたい。

2013/06/23

[ゲーム]ドラゴンクエストXがWindowsで発売

wii版もないのだが、

「ドラゴンクエストX 目覚めし五つの種族 オンライン」のWindows版発売が決定した。9月26日発売で価格はパッケージ・ダウンロード版とも3990円(20日間無料利用券つき)。

via:「ドラゴンクエストX」Windows版の発売決定
素手にアマゾンでは予約が開始されている。
ドラゴンクエストX 目覚めし五つの種族 オンライン
ドラゴンクエストX 目覚めし五つの種族 オンライン
スクウェア・エニックス

mac版はないのかな?

2013/06/22

[JavaScript][mobile safari]onbeforeunloadを未サポート

iOSでonbeforeunloadを使ってページ切り替え時に何かしらの処理を実行したいなーっと思っていたら、Supported Eventsを読むとどうやらサポートしていないようで、かつ、unloadも動きが不安定なようだ。

とほほ、どうしよー。

2013/06/21

[JavaScript][Require.js]jQueryをロード

昨日に引き続き今日もRequire.jsネタ

Require.jsを経由して、jQueryをロードしたい場合はどうすればいいのだろうか?

今回のディレクトリ構成は下のような感じ。

  • test.html
  • scripts/
    • main.js
    • app.js
で、それぞれのファイルは下のような感じ。
<-- test.html -->
<script src="http://cdnjs.cloudflare.com/ajax/libs/require.js/2.1.6/require.min.js" data-main="scripts/app"></script>
//app.js
require.config({
    paths: {
        jquery: 'http://ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min'
    }
});

require(["main"]);
//main.js
define(["jquery"], function($) {
    $(function() {
        console.log($)
        console.log('Hello jQuery')
    });
});
これでjQueryのロードも困ることはありませんね。

2013/06/20

[JavaScript][Require.js]Hello World

Require.jsなるものを知ったので、その使い方を勉強。

ディレクトリ構成は下のような感じ。

  • test.html
  • scripts/
    • main.js
で、それぞれのファイルは下のような感じ。
<-- test.html -->
<script src="http://cdnjs.cloudflare.com/ajax/libs/require.js/2.1.6/require.min.js" data-main="scripts/main"></script>
//main.js
require([''], function() {
  console.log('hello require js')
});
で、無事に実行した結果、「hello require js」が出力されました。

2013/06/19

[CSS]CSSライブラリ Pure

Yahooが作ったピュアCSSのUIライブラリ「Pure」で知ったのですが、どうやら、Yahooが、TwitterのBootstrapみたいなライブラリを提供したようです。

さっそく、Pureをのぞいたのですが、サンプルが素敵な感じで、勉強したくなってきました。

 photo yahoo_css_library_pure_zps72778121.png

2013/06/18

[facebook graph api]プロフィール画像の大きさ変更

以前、facebook graph apiを使ってサイズ変更された画像のデータの取得方法について書いたのですが、具体的な方法が何も書かれていなかったので、1エントリー。

「50px Wide×50px High」

https://graph.facebook.com/shaverm/picture?type=square

「50px Wide×Heightは不定」
https://graph.facebook.com/shaverm/picture?type=small

「100px Wide×Heightは不定」
https://graph.facebook.com/shaverm/picture?type=normal

「200px Wide×Heightは不定」
https://graph.facebook.com/shaverm/picture?type=large

縦と横を指定したい場合。
https://graph.facebook.com/shaverm/picture?width=40&height=60
縦と横に同じ数字を設定すれば正方形を返してくれるようです。
これは結構便利。

2013/06/17

[iOS][Google App Engine]Push Notificaation サーバーサイド実装編

前回にPush Notificaationを実装するにあたりpemファイルの発行までを書きました。

今日は、そのpemファイルを使って実際に通知を送る方法について書きたいと思います。

手順1:pemファイルを所定の場所に置く。
今回は、app.yamlと同じディレクトリに「hoge」というフォルダを作り、その中に、「cert.pem」ファイルと「pkey.pem」ファイルを置きました。

手順2:app.yamlの設定を編集する。
今回、

handlers:
- url: /hoge
  static_dir: hoge
  mime_type: application/x-pem-file
  application_readable: true

libraries:
- name: webapp2
  version: "2.5.1"

- name: ssl
  version: latest
と書きました。

手順3:apns.pyファイルをapp.yamlと同じディレクトリに置く。
ここにある「apns.py」ダウンロードして設置。

手順4:呼び出しもとのPythonファイルを編集。
実際に実行するときは、下のように組みました。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from apns import APNs,Payload

#途中省略
apns = APNs(use_sandbox=True, cert_file='hoge/cert.pem', key_file='hoge/pkey.pem')
       
alert = "this text is test"
payload = Payload(alert)
apns.gateway_server.send_notification("iOSからとってきたtoken", payload)

これで試したところ、確かに、iOSに通知を送ることができました。

今回は、開発用のpemで試しましたが、おそらく本番でも同じやり方でできるのではないかと思っています。

こうしてまとめておけば、次回以降はコピペですみそうなので、便利かなと。

2013/06/16

[本]エンジニアとしての生き方

読了
エンジニアとしての生き方  IT技術者たちよ、世界へ出よう! (インプレス選書)
エンジニアとしての生き方  IT技術者たちよ、世界へ出よう!
中島 聡

はじめに
プロローグ
第1章 “世界を舞台に働いてみないか?”
第2章 日本のエンジニアは大丈夫か?
 2-1.「ITゼネコン」の副作用
 2-2.大学生に勉強させない仕組み
 2-3.新興国を見下していると痛い目にあう
 2-4.かつての“必勝パターン”が通用しなくなっている
 2-5.金儲けは「悪」なのか
第3章 勝てば官軍、負ければガラパゴス
第4章 自分を変えて自由になろう
 4-1.まず第一に考えるべきは自分のキャリアパス
 4-2.キャリアパスの考え方
第5章 エンジニアとして世界で成功する
 5-1.世界のIT企業はこんな人材を探している
 5-2.一番大切な「好きだから頑張れる」
 5-3.英語はグローバル人材市場へのパスポート
 5-4.エンジニアに必要な「生の知性」とは?
 5-5.ブログを書こう。できれは実名で。
 5-6.ビジネスの事が分かる技術者なら最強
 5-7.独立・起業の前に知っておくべきこと
 5-8.技術書以外の本も読もう
おわりに
特別付録 試験官が自ら語る「ビルゲイツの面接試験」─生の知性を磨く頭の体操集─

via:目次
WEB+DB Pressからの引用が多いことを期待して購入したのだが、life is beautifulからの引用の方が多く既に読んだ内容が多かったので、ちょっとがっくし。

普段ブログを読んだことがなくて、本書が初見の場合は、

本書「エンジニアとしての生き方」は、社交辞令抜きで世界に出たエンジニア、中島聡による、日本のエンジニアたちとその卵たちに対する提言。

via:手がけよう、世界を - 紹介 - エンジニアとしての生き方
として楽しむことができる。

2013/06/15

[iOS][Google App Engine]Push Notificaation サーバーサイド設定編1 pemファイルの発行まで

前回までのエントリーでクライアント側のプログラムまで完了したので、今回は、サーバーサイド。

以前、書いたが、google app engineのver 1.7.7からPush Notificaationが使えるようになったので、さっそく試してみました。

実際には、「Google App EngineからiOSアプリへPush通知が送れるようになりました」を参考にしながら、わからないところは調べつつという感じで実装。

まずは、有料設定を行う。

理由はわからないのですが、有料設定をしないと、通知機能が使えないようです。

PyAPNsでソースのダウンロード

「apns.py」ファイルでは、pemファイルを使うようです。

そこで、pemファイルの作り方を調べました。

1.FInderのアプリケーションメニューにある「ユーティリティ」のさらに中にある「キーチェーン.app」をオープンする。

2.左側にある「自分の証明書」を選択する。

3.インストールされた「Apple Development iOS Push Services」というのがあるので、そのファイルの右側にある「▼」をクリックする。

4.「Maito Kuwahara Dev Key」が表示される。

5.「Apple Development iOS Push Services」だけを選択して「ファイル」→「書き出す」を選択。
 photo pushnotification_07_zpse17f0bad.png
6.任意の場所に「cert.p12」ファイルとして保存。

7.「Dev Key」だけ選択して同様に「pkey.p12」として保存。

8.ターミナルで

$ openssl pkcs12 -in pkey.p12 -out pkey.pem -nodes -clcerts
$ openssl pkcs12 -in cert.p12 -out cert.pem -nodes -clcerts
のようにして、コマンド実行後、pemファイルを作成。
(参考URL:python: APNs SSLError)

ここまでくれば、後は、Google App Engineの設定だけになるので、次回は、ここから書きたいと思います。

2013/06/14

[iOS][Objective-C]Remote PushNotificationの実装 コンパイルエラー

push notification込みのCertificateを追加設定してかつすでに作成済みのProvisioning Profilesがある場合、コンパイルする時に、

Appの有効なaps-environmentエンタイトルメント文字列が見つかりません
というエラーがでるのだが、この時は、もう一度、新しいProvisioning Profileを作ることでエラーを取ることができる。

ちょっとメンドイんだけどね。

2013/06/13

[iOS][Objective-C]Remote PushNotificationの実装 NSDataからNSStringに変換

昨日のエントリーで、Objective-Cでtokenの作り方を書いたが、NSStringに変換したい場合はどうすればいいのだろうか?

同じ悩みをもった人がいたようだ。
How can I convert my device token (NSData) into an NSString?
どうやら、下の方法でおkのようだ。

NSString* deviceToken = [[[[[newDeviceToken description]
                     stringByReplacingOccurrencesOfString: @"<" withString: @""] 
                    stringByReplacingOccurrencesOfString: @">" withString: @""] 
                   stringByReplacingOccurrencesOfString: @" " withString: @""] retain];

NSLog(@"%@",deviceToken);
実際に試したところ、確かに、これで取得できた。

descriptionメソッドを使うところが、今回のミソ。

備忘録として。

2013/06/12

[iOS][Objective-C]Remote PushNotificationの実装 iOS Objective-C編

昨日は、「Remote PushNotificationの実装 iOS Dev Center設定編」を書いたので、今日は、iOS側(Objective-C)を見ていく。

Certificateファイルのインストールが完了したということで、下のようにプログラムを組む。

[[UIApplication sharedApplication] registerForRemoteNotificationTypes:UIRemoteNotificationTypeAlert];
すると、下のうちどちらかを返してくれる。
//エラーの場合
- (void)application:(UIApplication *)app didFailToRegisterForRemoteNotificationsWithError:(NSError *)err {
    NSLog(@"Error in registration. Error: %@", err);
}
//正常終了の場合
- (void)application:(UIApplication *)app didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)devToken {

}
で正常終了の場合、NSData型でトークンを返してくれるので、これをサーバー側で保存することになります。

ちなみに、通知からアプリを起動した場合、
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{

}
のlaunchOptionsにUIApplicationLaunchOptionsRemoteNotificationKeyキーで情報が入っているようだ。

逆に何もない場合、空で返してくるので、現時点では、
//Remote PushNotificationからの起動の場合
if ([launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey] != nil) {

//Remote PushNotification以外の起動。
}else{

}
ここまででアプリ側の実装は完了したので、次回は、サーバー側について書きたいなと思います。

2013/06/11

[iOS][Objective-C]Remote PushNotificationの実装 iOS Dev Center設定編

やっとこさ、iOSでRemote PushNotificationの実装方法がわかったので、備忘録もかねて記録を残します。

まず、iOS dev centerの「Certificates, Identifiers & Profiles」に入ります。
(ちなみに前提条件として課金をしていないと通知機能を使うことができません。)

IdentifiersのApp IDsで通知設定をしたいidを選択します。

すると、下のようなイメージになっているはず。
 photo pushnotification_01_zps43deaa60.png
「Settings」ボタンを押すと各種設定をすることができるのですが、その中で下のようなイメージの部分があるはず。
 photo pushnotification_02_zps55547080.png
右上にチェックボックスがあるのでチェックを入れると左側が「緑色」に点灯します。
 photo pushnotification_03_zps2154ade6.png
今回はとりあえず、開発用として作るので、「Development SSL Certificate」の「Create Certificate...」をクリックする。

すると、CSR(Certificate Signing Request)を作るように要求される。
 photo pushnotification_04_zps20c5481b.png
作り方は、
1.FInderのアプリケーションメニューにある「ユーティリティ」のさらに中にある「キーチェーン.app」をオープンする。
2.「キーチェーンアクセス」メニューにある「認証アシスタント」の「認証局に証明書を要求」を選択する。
3.メールアドレスを入力するところにメールアドレスを記入。
4.通称に名称を入れる。(今回は、例に書かれている通り、Maito Kuwahara Dev Keyとした)
5.CAのメールアドレスは空欄でおk
6.「要求の処理」は「ディスクに保存」にチェックを入れる
7.最後に「続ける」ボタンを押す。
8.macにできたファイルを保存。

で上のイメージの「Continue」を押すと下の画面に切り替わる。
 photo pushnotification_05_zpsd2e0a937.png
できたCSRファイルをアップロードするとCertificateファイルができあがるので、ダウンロード。
 photo pushnotification_06_zpsed8ae39e.png
ダウンロードしたファイルをダブルクリックすると勝手にインストールされるので、これで設定は完了。

2013/06/10

[Python][GoogleAppEngine]Propertyの存在確認

Propertyのdefault値は何も設定しない場合Noneとなっているので、Propertyが存在するかどうかは、下のコードで確認することができる。

#Noneの場合
if hoge.foo is None:
 pass
ポイントは、Noneの確認方法

PythonではNoneの比較は==ではなくisを使う」を読むと、
#Noneの場合
if hoge.foo == None:
 pass
ではNGだということ。

気をつけたいですねー。

2013/06/09

[iOS][Objective-C]RemotePushNotificationについて

Local and Push Notification Programming Guide」を読みながらRemote Push Notificationを実装しようとしているのだが、どうやら、シミュレーターではサポートしていないようだ。

- (void)application:(UIApplication *)app didFailToRegisterForRemoteNotificationsWithError:(NSError *)err {
    NSLog(@"Error in registration. Error: %@", err);
}
で、
Error in registration. Error: Error Domain=NSCocoaErrorDomain Code=3010 "remote notifications are not supported in the simulator"
と返されてしまいました。

2013/06/08

[本]メディアが出さない世界経済ほんとうの話

読了
メディアが出さない世界経済ほんとうの話
メディアが出さない世界経済ほんとうの話
田中 宇

まえがき―メディア偏向を裏から理解せよ
第1章 やがて破綻するドル
第2章 米国覇権が崩れ、多極型の世界体制ができる
第3章 世界のデザインをめぐる200年の暗闘
第4章 歴史各論
第5章 金融覇権をめぐる攻防
第6章 しだいに多極化に対応する中国
第7章 多極化対応で内乱続く日本

via:目次
久しぶりの田中宇氏の著者。

氏の著者を読んでいつも思うのは、日本大丈夫か?ということ。
かつ本当にメディアって役に立つのか?と思ったり。

今の世界があるのは何百年前からの歴史の積み重ねであるのだから本質を掴むのは難しいんだなーっと。

氏のようにもっと世界情勢を知るために海外のメディアを購読したくなるんだけど、時間がないなー。

2013/06/07

[Objective-C][iOS]UITabBarを動的に表示・非表示にする

もともと表示されていたUITabBarを非表示にして表示領域を増やす方法はあるのだろうか?

Hide UITabBarController/UITabBar with animation. 」を参考にすると、アニメーションをさせない場合は、下のようにすればいいことがわかる。

//UITabBarController
-(void)showTabBar:(BOOL)isShow{
    CGFloat appHeight = [UIScreen mainScreen].bounds.size.height;

    for(UIView *view in self.view.subviews){
        CGRect viewRect = view.frame;
        CGFloat resetVal = (isShow)? (appHeight - 49) : appHeight;
        if([view isKindOfClass:[UITabBar class]]){
            viewRect.origin.y = resetVal;
        }else{
            viewRect.size.height = resetVal;
        }
        view.frame = viewRect;
    }

}
これで非表示・表示も困ることはありません。

2013/06/06

[Objective-C][facebook]自分自身の情報を問い合わせる

前回、「raphAPIへの問い合わせ」について書いたが、自分自身の情報を問い合わせる場合は、下のようなmeを使ったやり方で取得することができる。

[[FBRequest requestForGraphPath:@"me"] startWithCompletionHandler:^(FBRequestConnection *connection, id result, NSError *error) {
        if(!error){
            NSLog(@"fetch Facebook account info");
            FBGraphObject *grapobject = (FBGraphObject *)result;
             
            //[grapobject objectForKey:@"gender"];
            // [grapobject objectForKey:@"name"];
             
 
        }else{
             
        }
}];

2013/06/05

[Facebook][iOS][Objective-C]友達一覧を表示

昨日のエントリーではFBFriendPickerViewControllerのヘッダーのカスタマイズについて書きました。

そこで今日は、そもそもの友達リストの表示方法について書きたいと思います。
(対象SDKのバージョンは3.5.1)

headerファイルはこちら

#import <FacebookSDK/FacebookSDK.h>
@interface hogeViewController:UIViewController<FBViewControllerDelegate>{
 FBFriendPickerViewController *friendPickerController;
}
@property (strong, nonatomic) FBFriendPickerViewController *friendPickerController;

で、mainファイルはこちら
@implementation hogeViewController
@synthesize friendPickerController = _friendPickerController;

/*------------------------------------------------------
UIViewController
-------------------------------------------------------*/
- (id)initWithNibName:(NSString*)nibNameOrNil bundle:(NSBundle)nibBundleOrNil{
 self = [supre initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
 if(self){
  self.friendPickerController = [[FBFriendPickerViewController alloc] initWithNibName:nil bundle:nil];
  //NavigationBarに表示されるタイトル
  self.friendPickerController = @"Invite Friend";
  self.friendPickerController.delegate = self;
 }
 return self;

}

/*------------------------------------------------------
Original Method
-------------------------------------------------------*/
//友達一覧を表示するメソッド
//仮でここではshowFBFriendsとする
-(void)showFBFriends{
 //選択された友達をいったん解除する
 [self.friendPickerController clearSelection];
 [self.friendPickerController loadData];
 [self.navigationController pushViewController:self.friendPickerController animated:true];
}

/*------------------------------------------------------
FBViewControllerDelegate
-------------------------------------------------------*/

//右側にある「Done」ボタンが押されたとき
- (void)facebookViewControllerDoneWasPressed:(id)sender{

}

//左側にある「Cancel」ボタンが押されたとき
- (void)facebookViewControllerCancelWasPressed:(id)sender{

}
こうしてまとめておくとコピペで後から使い回しができるので便利かなと。

参考URL
Friend Picker
3 - Show Friends

2013/06/04

[Objective-C][facebook]GraphAPIへの問い合わせ

最新のfacebook sdk ver3.5.1を使ってGraphAPIへアクセスするにはどうすればいいのだろうか?

FBRequestを読むと下のようにすれば、リクエストを飛ばすことができるようだ。

[[FBRequest requestForGraphPath:@"facebookid"] startWithCompletionHandler:^(FBRequestConnection *connection, id result, NSError *error) {
        if(!error){
            NSLog(@"fetch Facebook account info");
            FBGraphObject *grapobject = (FBGraphObject *)result;
            
            //[grapobject objectForKey:@"gender"];
            // [grapobject objectForKey:@"name"];
            

        }else{
            
        }
}];
実際、これで実行したら種々の情報を取得することができましたー。