感謝のプログラミング 10000時間

たどり着いた結果(さき)は、感謝でした。

Facebookアプリ開発でテストユーザを作成し、ウォールにメッセージを投稿するまで。

スポンサーリンク

まず、Facebookアプリの種類をまとめる。

キャンバス型アプリ

これはけっこう多くのアプリで使われてる形態だけど、Facebookのサイドバーがついた状態で実行されるWebアプリケーションのこと。
アプリ開発者がサーバにPHPやHTMLを配置して、出力される結果はFacebookのiframeの中で表示される。
このインラインフレームの領域を「キャンバス」と呼ぶ。
多くのくだらない診断アプリ(笑)はこの形式で表示されている。

独立型アプリ

Facebookアカウントを使用したログインやウォールへの書き出し機能などを持ったWebアプリケーションのこと。

ネイティブアプリ

Facebook APIを使用したスマートフォン各機種専用のアプリのこと。
Objective-CJavaなどの言語で開発される。

タブ型アプリ

Facebookページのタブに組み込むためのWebアプリのこと。
インラインフレームを使ってアプリを表示する。

どの形式でも、「Facebookにて認証して、アクセストークンを取得。アクセストークンを使ってAPIからデータを取得する」という手順は共通となる。

Facebookアプリ作成のためのテストユーザを作成する

まずアプリの設定画面にいく。
「設定」のところにある「開発者の役割」をクリック。
出てくる「テストユーザー」→「作成」で適当な数のテストユーザーを作成できる。

テストユーザーのウォールに「Hello Facebook App」と投稿するサンプル

以下のようなPHPを書いて、レンタルサーバなどに配置することで、Facebookのウォールに投稿することができる。

<?php
//アプリケーションIDなどを定義する
define('FACEBOOK_APP_ID', 'XXXXX');
define('FACEBOOK_APP_SECRET', 'YYYY');
define('APP_DIR', 'fb-app/test.php');
define('APP_ROOT', 'http://apps.facebook.com/test-fb-app-hoge/');

//PHPのfacebook SDKを読み込む
require_once('./facebook.php');

//引数にアプリケーションIDをなどを渡して、Facebookインスタンスを作成する
$facebook = new Facebook(array(
		'appId' => FACEBOOK_APP_ID,
		'secret' => FACEBOOK_APP_SECRET,
		));

$user = $facebook->getUser();

if ($user) {
	try {
		$profile = $facebook->api('/me');
		$permissions = $facebook->api('/me/permissions');
	} catch (FacebookApiException $e) {
		$user = null;
		$profile = array();
		$permissions = array();
	}

	if (! array_key_exists('publish_stream', $permissions['data'][0])) {
		$user = null;
	}
}

if (! $user) {
	$url = $facebook->getLoginUrl(array(
			'scope' => 'publish_stream',
			'canvas' => 1,
			'fbconnect' => 0,
			'redirect_uri' => APP_ROOT . APP_DIR
			));
	printf("<html><body><script type='text/javascript'>top.location.href = '%s';</script></body></html>", $url);
	exit();
}

$params = array(
		'message' => "Hello facebook App",
		'link' => APP_ROOT . APP_DIR,
		'name' => "facebook app dev",
		);
try {
	$ret_obj = $facebook->api(
			'/me/feed',
			'POST',
			$params
			);
} catch (FacebookApiException $e) {
	die($e->getMessage());
}
?>

実際に、テストユーザのウォールにはこんな感じで書き込まれる。
f:id:sho322:20131120012028p:plain

今回参考にした本

Facebookアプリ プログラミング入門

Facebookアプリ プログラミング入門

サンプルにバグが残っているものの、例が多くて調べながらやる分には大いに参考になる。