TShopping

 找回密碼
 註冊
搜索
查看: 1243|回復: 2

[教學] iPhone 開發教學 發訊息到 Facebook 塗鴉牆 用 Facebook Connect 架構

[複製鏈接]
發表於 2012-4-2 16:38:41 | 顯示全部樓層 |閱讀模式
 
Push to Facebook Push to Plurk Push to Twitter 

若想要開發一些 iPhone 小軟體,並將一些訊息發佈到 Facebook 上面,可以先逛逛這些頁面:
剩下的就仿造 Facebook Connect for iPhone - Facebook Developer Wiki 所提到的設定,先到 facebook's facebook-iphone-sdk at master - GitHub 下載相關程式碼,可在右邊直接按 Download Source 下載。
以下參考 iPhone 開發教學 - 環境設置和第一支程式 Hello World 範例,建立一個簡單的範例後,接著去打開下載回來的檔案,此例為 facebook-facebook-iphone-sdk-5382dcd.zip ,並且解開後找其子目錄 src 中,點選開啟 FBConnect.xcodeproj ,接著將 FBConnect 拖拉到 HelloWorld 上頭,並且使用預設選項不勾選 copy items 囉
接著,設定 HelloWorld 這個專案,[Xcode]->[Project]->[Edit Project Setting]->[Build]->[Search Path]->[Headers Search Paths] 點選右邊空白,增加你下載的 facebook-iphone-sdk 程式碼的位置,在此使用 /Users/uid/Downloads/facebook-facebook-iphone-sdk-5382dcd/src,弄完接著就可以對 HelloWorld 進行編譯看看,[Xcode]->[Project]->[Build] ,在此只看到一個 warning ,先暫時不管他。
開始正式測試 Facebook 與 iPhone 的結合啦
原樣:

  1. HelloWorldAppDelegate.h
  2. #import <UIKit/UIKit.h>

  3. @interface HelloWorldAppDelegate : NSObject <UIApplicationDelegate> {
  4.     UIWindow *window;
  5.     IBOutlet UILabel *showLabel;
  6.     IBOutlet UIButton *actionButton;
  7. }

  8. @property (nonatomic, retain) IBOutlet UIWindow *window;
  9. - (IBAction)updateLabel;

  10. @end
  11. HelloWorldAppDelegate.m
  12. #import "HelloWorldAppDelegate.h"

  13. @implementation HelloWorldAppDelegate

  14. @synthesize window;

  15. - (void)applicationDidFinishLaunching:(UIApplication *)application {
  16.     // Override point for customization after application launch
  17.     [window makeKeyAndVisible];
  18. }
  19. - (void)awakeFromNib {
  20.     showLabel.text = @"Hello World!";
  21. }
  22. - (IBAction)updateLabel {
  23.     static int count = 0;
  24.     showLabel.text = [NSString stringWithFormat: @"Value: %d" , ++count];
  25. }
  26. - (void)dealloc {
  27.     [window release];
  28.     [super dealloc];
  29. }

  30. @end
複製代碼

更改後:

  1. HelloWorldAppDelegate.h
  2. #import <UIKit/UIKit.h>
  3. #import "FBConnect/FBConnect.h"
  4. #import "FBConnect/FBSession.h"
  5. #define FB_APP_KEY @"YOUR_APP_KEY"
  6. #define FB_SEC_KEY @"YOU_SEC_KEY"

  7. @interface HelloWorldAppDelegate : NSObject <UIApplicationDelegate>  {
  8.     UIWindow *window;
  9.     IBOutlet UILabel *showLabel;
  10.     IBOutlet UIButton *actionButton;
  11.     IBOutlet FBLoginButton *fbButton;
  12.     FBSession *fbSession;
  13.     id<FBRequestDelegate> delegate;
  14.     int status;
  15. }
  16. @property (nonatomic, retain) IBOutlet UIWindow *window;
  17. @property (nonatomic, retain) IBOutlet FBLoginButton *fbButton;
  18. @property (nonatomic, retain) FBSession *fbSession;
  19. @property(nonatomic,assign) id<FBRequestDelegate> delegate;
  20. - (IBAction)updateLabel;

  21. @end
  22. HelloWorldAppDelegate.m
  23. #import "HelloWorldAppDelegate.h"

  24. @implementation HelloWorldAppDelegate

  25. @synthesize window;
  26. @synthesize fbButton;
  27. @synthesize fbSession;
  28. @synthesize delegate;

  29. - (void)applicationDidFinishLaunching:(UIApplication *)application {
  30.     status = 0 ;
  31.     // Override point for customization after application launch
  32.     [window makeKeyAndVisible];
  33. }
  34. - (void)awakeFromNib {
  35.     showLabel.text = @"Hello World!";
  36.     if ( self.fbSession == nil ) {
  37.         self.fbSession = [FBSession sessionForApplication:FB_APP_KEY secret:FB_SEC_KEY delegate:self ];
  38.     }
  39. }
  40. - (void)session:(FBSession*)session didLogin:(FBUID)uid {
  41.     status = 1;
  42.     NSString* fql = [NSString stringWithFormat:@"select uid,name from user where uid == %lld",self.fbSession.uid];
  43.     NSDictionary* params = [NSDictionary  dictionaryWithObject:fql forKey:@"query"];
  44.     [[FBRequest requestWithDelegate:self] call:@"facebook.fql.query" params:params];
  45. }
  46. - (void)request:(FBRequest*)request didLoad:(id)result {
  47.     if ([request.method isEqualToString:@"facebook.fql.query"]) {
  48.         NSString * username = [ ((NSDictionary*)[(NSArray*)result objectAtIndex:0 ]) objectForKey:@"name"] ;
  49.         showLabel.text = [NSString stringWithFormat:@"Hi, %@" , username ];
  50.     }
  51. }
  52. - (IBAction)updateLabel {
  53.     if ( status == 0 ) {    // do login
  54.         FBLoginDialog* dialog = [[[FBLoginDialog alloc] initWithSession:self.fbSession] autorelease];
  55.         [dialog show];
  56.     }
  57.     else {                    // do post to Wall
  58.         FBStreamDialog* dialog = [[[FBStreamDialog alloc] init] autorelease];
  59.         dialog.delegate = self;
  60.         dialog.userMessagePrompt = @"Example prompt";
  61.         dialog.attachment = @
  62.             "{"
  63.                 "\"name\":\"Facebook Connect for iPhone\","
  64.                 "\"href\":\"http://developers.facebook.com/connect.php?tab=iphone\","
  65.                 "\"caption\":\"Caption\","
  66.                 "\"description\":\"Description\","
  67.                 "\"media\":[{"
  68.                     "\"type\":\"image\","
  69.                     "\"src\":\"http://img40.yfrog.com/img40/5914/iphoneconnectbtn.jpg\","
  70.                     "\"href\":\"http://developers.facebook.com/connect.php?tab=iphone/\"}],"
  71.                 "\"properties\":{"
  72.                     "\"another link\":{"
  73.                         "\"text\":\"Facebook home page\","
  74.                         "\"href\":\"http://www.facebook.com\""
  75.                     "}"
  76.                 "}"
  77.             "}";
  78.         // dialog.targetId = @"999999"; // replace this with a friend's UID
  79.         [dialog show];
  80.     }
  81. }
  82. - (void)dealloc {
  83.     [self.fbButton release];
  84.     [self.fbSession release];
  85.     [window release];
  86.     [super dealloc];
  87. }

  88. @end
複製代碼

一開始
按下按鈕,進入登入畫面
登入後,顯示暱稱
按下按鈕,進入發佈到塗鴉牆的過程
輸入資料中
在 Facebook 上的顯示
程式解說:
透過 status 變數控制,當 status ==0 時按下 button 時,歸類在做 login 的動作,等到登入成功後,則 status 更新為 1 ,當 status == 1 時,按下 button 後,則進入發佈到塗鴉牆的動作。
目前程式有點類似拼湊起來的,編譯上會有 warning:
Class 'HelloWorldAppDelegate' does not implement the 'FBSesionDelegate' protocol
Class 'HelloWorldAppDelegate' does not implement the 'FBRequestDelegate' protocol
Class 'HelloWorldAppDelegate' does not implement the 'FBDialogDelegate' protocol
建議可以看看 iPhone FBConnect: Facebook Connect Tutorial 所規劃的程式範例,上頭有作架構上的切割,在此只是純粹測試 Facebook API ,除了全部擠在一起外,還有些函數寫的不謹慎,只是恰好此情況不會出現什麼問題囉!

 

臉書網友討論
 樓主| 發表於 2013-2-1 19:30:19 | 顯示全部樓層
人在做天在看,推到天上......

版主招募中

發表於 2014-7-16 12:46:06 | 顯示全部樓層



  知道了 ~~~


您需要登錄後才可以回帖 登錄 | 註冊 |

本版積分規則



Archiver|手機版|小黑屋|免責聲明|TShopping

GMT+8, 2016-12-6 12:50 , Processed in 0.056558 second(s), 18 queries .

本論壇言論純屬發表者個人意見,與 TShopping綜合論壇 立場無關 如有意見侵犯了您的權益 請寫信聯絡我們。

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表