More Related Content Similar to リアルFacebookガジェットを作った(ロングバージョン) (20) リアルFacebookガジェットを作った(ロングバージョン)18. SELECT
id, owner_id, title,
description, start_time
FROM page_milestone
WHERE owner_id
IN (SELECT page_id
FROM page_fan
WHERE uid=me())
ORDER BY start_time;
61. Facebook
API HTTPS Request
(FQL)
Response PC
(通知数)
Native
App
USB通信
(通知数)
NOTICE
62. Facebook
API HTTPS Request
(FQL)
Response PC
(通知数)
Native
App
アップデート前提
USB通信
(通知数)
NOTICE
72. FQLで
COUNTは
使えない
だめな例:
SELECT COUNT(*)
FROM friend_request ...
73. FQLで
COUNTは
使えない
だめな例:
SELECT COUNT(*)
FROM friend_request ...
SQL脳の恐怖
79. Query:
SELECT FROM notification
{
"data": [
{
"anon": ""
}, {
"anon": ""
}
]
}
80. Query:
SELECT FROM notification
Response:
{
"data": [
{
"anon": ""
}, {
"anon": ""
}
]
}
すっきり
さわやか
81. Multi-query
複数クエリをまとめて実行
結果もまとめて返ってくる
{
"notification":
"SELECT '' FROM notification
WHERE recipient_id=me() AND is_unread=1",
"message":
"SELECT '' FROM unified_thread
WHERE has_tags('inbox') and not (has_tags('seen'))",
"friend_request":
"SELECT '' FROM friend_request
WHERE uid_to=me() AND unread=1"
}
86. URL変更をハンドル
- (void)webView:(WebView *)sender resource:(id)identifier
didFinishLoadingFromDataSource:(WebDataSource *)
dataSource
{
NSString *url = dataSource.request.URL.absoluteString;
NSRange match = [url rangeOfString:@"access_token="];
if (NSNotFound !=match.location)
{
// Access Token Found
NSString *accessToken =
[[url substringWithRange:match] substringFromIndex:
[@"access_token=" length]];
NSLog(@"Short Access Token Found.: %@", accessToken);
}
}
90. URL変更をハンドル
private void onLoad(object sender,
WebBrowserDocumentCompletedEventArgs e)
{
string url = browser.Url.ToString();
if (url.Contains("access_token="))
{
Regex regex =
new Regex("access_token=([A-Za-z0-9]+)");
Match match = regex.Match(url);
string token = match.Groups[1].Value;
Console.WriteLine(token);
}
}
101. App Browser
https://www.facebook.com/dialog/oauth
Open ?client_id=XXXXXX
&redirect_uri=http://www.example.com/auth/
&&response_type=token
Authentication
http://www.example.com/auth/
#access_token=XXXXXXXX
&expires_in=4726
Redirect
myCoolApp:auth?
access_token=XXXXXXXX
Save &expires_in=4726
Access Open
by URI Scheme
Token
105. myCoolApp:hogeを開くと
アプリが起動
- (void)applicationWillFinishLaunching:(NSNotification *)aNotification
{
// イベントマネージャ取得
NSAppleEventManager *eventManager =
[NSAppleEventManager sharedAppleEventManager];
// イベントハンドラをセット
[eventManager setEventHandler:self
andSelector:@selector(handleGetURLEvent:withReplyEvent:)
forEventClass:kInternetEventClass andEventID:kAEGetURL];
}
- (void)handleGetURLEvent:(NSAppleEventDescriptor *)event
withReplyEvent:(NSAppleEventDescriptor *)replyEvent
{
NSString * url =
[[event paramDescriptorForKeyword:keyDirectObject] stringValue];
NSLog(@"URL=%@",url); //起動時のURL取得
}
109. HKEY_CLASSES_ROOT
hoge
(Default) = "URL:Hoge Protocol"
URL Protocol = ""
DefaultIcon
(Default) = "Hoge.exe,1"
shell
open
command
(Default) = "Hoge.exe" "%1"
110. hoge:fugafuga を開くと
アプリが起動
namespace Hoge
{
class Program
{
static string ProcessInput(string s)
{
return s;
}
static void Main(string[] args)
{
foreach (string arg in args)
{
Console.WriteLine("arg=" + arg);
}
}
}
}
113. ケース ソフトウェア
プロダクトデザイン 本体側
3D CAD AVR
試作品の製造 Mac OS X
美意識:-) Objective-C
C
Windows
回路 .Net + C#
回路設計 Facebook API
電磁気学
基板作り
PCB基板生産 量産
配線 (アートワーク) EMS (受託生産)
発注
部品調達
実装
普通のはんだづけ
表面実装
各種規制・規格