網頁

2012年12月21日 星期五

【facebook SDK 3.1】教程2-登入,認證,登出

【環境:xCode4.5 , ios6 , USE ARC】
facebook app what is NEW:【facebook SDK 3.1】what is NEW?

facebook app的基本設定,請參考:【facebook SDK 3.1】教程1-設定

說明:
這篇文章,主要在說明,登入-->驗證-->登出 等步驟說明。
若有需要基本設定等,請參考上面文章。

目前facebook login共有三種,現在說明的是目前2012釋放的版本教學。

在新本的SDK 3.1中,若用戶嘗試登入facebook,facebook SDK將會針對目前用戶的設定,選擇最佳的登入方式。
若用戶已經給與ios app權限,SDK將會立即取得token。

現在讓我們開始享受coding的流程吧...

step 1 : include the Facebook SDK
首先建立一個uiviewcontroller,命名為login,將此view設定為windows的rootviewcontroller。
分別在login.m和delegate.m下加入
#import <FacebookSDK/FacebookSDK.h>

step 2 : impelment the login flow

1.在login.m中建立一個uibutton名稱自定,若要跟下面所講的內容一樣的話,那就authButton

2.開啓你的delegate.h檔,建立一個全域變數
extern NSString *const FBSessionStateChangedNotification; 


3.開啓你的delegate.m檔,並定義一個notification string
NSString *const FBSessionStateChangedNotification =
    @"com.example.Login:FBSessionStateChangedNotification";


你要注意的是『com.example.Login』這是你iOS app的bundle id…..

4.接下來,將下列兩個方法放到你的delegate.m中
/*
 * Callback for session changes.
 */
- (void)sessionStateChanged:(FBSession *)session
                      state:(FBSessionState) state
                      error:(NSError *)error
{
    switch (state) {
        case FBSessionStateOpen:
            if (!error) {
                // We have a valid session
                NSLog(@"User session found");
            }
            break;
        case FBSessionStateClosed:
        case FBSessionStateClosedLoginFailed:
            [FBSession.activeSession closeAndClearTokenInformation];
            break;
        default:
            break;
    }
    
    [[NSNotificationCenter defaultCenter]
     postNotificationName:FBSessionStateChangedNotification
     object:session];
    
    if (error) {
        UIAlertView *alertView = [[UIAlertView alloc]
                                  initWithTitle:@"Error"
                                  message:error.localizedDescription
                                  delegate:nil
                                  cancelButtonTitle:@"OK"
                                  otherButtonTitles:nil];
        [alertView show];
    }
}

/*
 * Opens a Facebook session and optionally shows the login UX.
 */
- (BOOL)openSessionWithAllowLoginUI:(BOOL)allowLoginUI {
    return [FBSession openActiveSessionWithReadPermissions:nil
                                          allowLoginUI:allowLoginUI
                                     completionHandler:^(FBSession *session,
                                                         FBSessionState state,
                                                         NSError *error) {
                                         [self sessionStateChanged:session
                                                             state:state
                                                             error:error];
                                     }];
}

5.在你的.h檔中加入
- (BOOL)openSessionWithAllowLoginUI:(BOOL)allowLoginUI;

6.若你需要額外的權限,修改openSessionWithAllowLoginUI:方法

ex:要求email 和 user_likes 的用戶權限
- (BOOL)openSessionWithAllowLoginUI:(BOOL)allowLoginUI {
    NSArray *permissions = [[NSArray alloc] initWithObjects:
        @"email", 
        @"user_likes",
        nil];
    return [FBSession openActiveSessionWithReadPermissions:permissions
                                              allowLoginUI:allowLoginUI
                                         completionHandler:^(FBSession *session,
                                                         FBSessionState state,
                                                         NSError *error) {
                                         [self sessionStateChanged:session
                                                             state:state
                                                             error:error];
                                     }];
}

7.若你需要寫入的權限,如:public_actions,你必須使用
reauthorizeWithPermissions:defaultAudience:completionHandler: 

permissions guide會有更多相關訊息

8.login flow最大的不同點在於 iOS 6+ 與 早期的iOS版本 兩者。
在iOS 6中,登入時,你的app將傳遞控制權給Facebook iOS app or 手機瀏覽器中的Facebook。
當使用者認證後,控制權將返回給你的app,同時夾帶session的資訊在編碼過的URL中。
為了記錄這些資訊,你需要給在返回的url中做一些處理,在ios6+中,login flow從ios中取得用戶的證書,用戶不需傳送資訊到facebook app。

9.在delegate.m中,分別找到對應的位置,把下面的code塞進去
- (BOOL)application:(UIApplication *)application
            openURL:(NSURL *)url
  sourceApplication:(NSString *)sourceApplication
         annotation:(id)annotation {
    // attempt to extract a token from the url
    return [FBSession.activeSession handleOpenURL:url];
}

- (void)applicationDidBecomeActive:(UIApplication *)application
{
    [FBSession.activeSession handleDidBecomeActive];
}

- (void)applicationWillTerminate:(UIApplication *)application
{
    [FBSession.activeSession close];
}

10.在你的login.m中
#import "AppDelegate.h"

並將剛剛設定好的button的action,寫成
- (void)authButtonAction
{
    AppDelegate *appDelegate =
    [[UIApplication sharedApplication] delegate];
    
    // If the user is authenticated, log out when the button is clicked.
    // If the user is not authenticated, log in when the button is clicked.
    if (FBSession.activeSession.isOpen) {
        [appDelegate closeSession];
    } else {
        // The user has initiated a login, so call the openSession method
        // and show the login UX if necessary.
        [appDelegate openSessionWithAllowLoginUI:YES];
    }
} 

此時你run project的話會看到兩種畫面,
『根據你的設定會有所不同:有無使用ios 6 內建的facebook帳號登入』
並在log中看到
2012-12-21 18:56:16.832 facebooktest[2725:19a03] User session found

到了這一步...你已經完成了登入+驗證的程序

step 3 : impelment the logout flow

1.在delegate.m中
- (void) closeSession {
    [FBSession.activeSession closeAndClearTokenInformation];
} 

2.在delegate.h中
- (void) closeSession; 

3.改寫你的- (void)authButtonAction
- (void)authButtonAction
{
    AppDelegate *appDelegate =
    [[UIApplication sharedApplication] delegate];
    
    // If the user is authenticated, log out when the button is clicked.
    // If the user is not authenticated, log in when the button is clicked.
    if (FBSession.activeSession.isOpen) {
        [appDelegate closeSession];
    } else {
        // The user has initiated a login, so call the openSession method
        // and show the login UX if necessary.
        [appDelegate openSessionWithAllowLoginUI:YES];
    }
} 

4.在login.m中的viewdidload中
[[NSNotificationCenter defaultCenter]
     addObserver:self
     selector:@selector(sessionStateChanged:)
     name:FBSessionStateChangedNotification
     object:nil];

5.在login.m中的- (void)didReceiveMemoryWarning
 
[[NSNotificationCenter defaultCenter] removeObserver:self];

6.在login.n中添加此方法
 
- (void)sessionStateChanged:(NSNotification*)notification {
    if (FBSession.activeSession.isOpen) {
        [self.authButton setTitle:@"Logout" forState:UIControlStateNormal];
    } else {
        [self.authButton setTitle:@"Login" forState:UIControlStateNormal];
    }
}

7.在login.m中的viewdidload中的最後面加上
 
AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
[appDelegate openSessionWithAllowLoginUI:NO];


==
到這邊就完成了自建的登入、驗證、註冊...等動作
當然facebook sdk中也有提供login ui的api
不過就不像這種彈性方式了~

最後若有error,請檢查facebook app的設定是否正確.
ex:bundle id沒有設定好,請參考前面的設定文章


As always , if you have any question , feel free to contact me.
有任何問題,請聯絡我

歡迎轉載,請註明出處,感謝。

2012年12月20日 星期四

【facebook SDK 3.1】教程1-設定

【環境:xCode4.5 , ios6 , USE ARC】
說明:

facebook SDK 3.1 官方範例下載,下載完畢後須安裝。

官方的source code在此:Note that when building the SDK from source, you must first run scripts/build_framework.sh before compiling and running the samples.

這邊有介紹裡面用的sample code目的為何。

上面零零落落的稍微講一下,若你想知道sdk 3.1的特性有哪些,請參考:【facebook SDK 3.1】what is NEW?


若你想參考如何登入、驗證、登出:【facebook SDK 3.1】教程2-登入,認證,登出


Step 1:Create a facebook app(官方步驟4)

首先,你需要一個建立一個 facebook app ,透過這個app,從用戶那邊取得權限,建立的方式比較特別的應該是『Bundle ID』為必填。
下面就是一個簡單的教學步驟:


1.首先請到這邊,建造你的facebook app,並建立基本資訊

建立好你的facebook app 後,會產生專屬的app ID 顯示在最上方


2.現在你需要將你app中的bundle identifier,使你的facebook app可支援從你的ios app中登入
(這在facebook 3.1中必須的動作)

點選 “Native iOS App”  
Bundle ID:  (必填-請填入你ios app中的設定)
iPhone App Store ID: (選填)
iPad App Store ID: (選填)
Facebook Login: 選擇Enable
Deep Linking: 選擇Enable
URL Scheme Suffix: (選填)



bundle id我想寫過app的人應該知道到哪裡可以找得到。


Step 2:Configure a new xcode project
這個步驟主要是講,你的app該怎樣設定,才可以正確使用facebook framework。

一、有四個framework你必須放到你的專案中:

1.**FacebookSDK.framework  : 在你下載的檔案當中,直接拖進專案。
(以下三個均為xcode已有的framework,加入方法我想大家應該都知道)
2.**Social.framework
3.**Accounts.framework
4.**AdSupport.framework

其中AdSupport.framework,僅有在你必須用到facebook的廣告時,才須設定,要付費,如果你想用facebook行銷,或許這是一個不錯的方法。


二、除了上述四個 framework 外,你還需要放入兩個bundle:
FacebookSDKResources.bundle
FBUserSettingsViewResources.bundle


位置在你剛加入的 Facebook.framework 中的 resources 裡。


三、

若你想要3.1版本同時支援較舊版本的ios....非ios6,且ios 4.3+
請將framework的flag
**Social.framework
**Accounts.framework
**AdSupport.framework

從"Required"選擇成"Optional"



四、在other link中,加入''-lsqlite3.0''


五、info.plist中加入
key:FacebookAppID 
type:string
value:(你申請的Facebook app id)  

六、建立url type
格式為   fb + (你申請的Facebook app id)



後記:
走到這一步,恭喜你已經完成基本設定。
雖然看起來很複雜,但是其實每一個步驟都有他的意義,其時設定久了,也就習慣了。



As always , if you have any question , feel free to contact me.
有任何問題,請聯絡我

歡迎轉載,請註明出處,感謝。

【facebook SDK 3.1】what is NEW?

【環境:xCode4.5 , ios5.1 & ios6 , USE ARC】

facebook app的基本設定,請參考:【facebook SDK 3.1】教程1-設定
若你想參考如何登入、驗證、登出:【facebook SDK 3.1】教程2-登入,認證,登出

說明:

首先來分享SDK 3.1有什麼新功能,畢竟工欲善其事、必先利其器,重點還要瞭解他的特性,才能把事情做好。

更快、更簡單的方式,去整合SDK 3.1還有你的iOS app,當然iOS 6是整合的重點,包含:
1.本機facebook login:利用iOS 6去登入facebook的功能,原理應該是,因為你已經利用iOS 6裡面的facebook登入過,所以取得session的方式,也是跟iOS 6拿到,不用再透過scheme的方式,跳到facebook的登入頁,再跳轉回你自己的app,相對的速度上優化許多。

2.分享機制也一樣,透過Native sheet提高分享文章的效能。


因整合ios,故可利用Native 提供的UI元件,讓你更快、更簡單的套用相關功能,如:
Friend Picker、Places Picker、Profile Picture、Login controls 
讓用戶的體驗更加的完善。

ps:不過還是自己打造的元件比較順眼點。

其他特徵包括:
1.與iOS的無縫結合:讓你的app與ios 4.3+版本,更無縫地結合,在iOS6上,更簡單的整合login與分享機制。
2.更簡單的session管理:利用引入的FBSession API,管理、儲存、更新使用者的token。
3.改善API效能:你只需要編寫少量的code去使用Facebook Graph, FQL, and other APIs...等,運用多線程的效能,使用上將更快更完善,讓用戶體驗更好。
4.你可以經由SDK 3.1安裝廣告,去了解有多少用戶使用你的ads,安裝ads可以衡量點擊次數和app的安裝次數。
ps:透過facebook app,也可以看到一些基本資料,如:註冊使用人數...等等。


ps:在這一版的SDK中,也遇過不少問題...因為同時要滿足6和6以下的用戶,又要滿足有些人非用ios6的native facebook,考量的點有很多。


As always , if you have any question , feel free to contact me.
有任何問題,請聯絡我

歡迎轉載,請註明出處,感謝。

2012年9月19日 星期三

iOS Data Storage Guidelines(中譯)

【環境:xCode4.3.2 , ios5.1 , USE ARC】
說明:原文連接 - 需登錄開發者帳號
本文說明apple官方對於iOS儲存資料的一些規範。
若想學習如何將你的app,加入iCloud儲存的功能,請參考 此連結




iCloud 已存在自動每天從Wi-Fi備份使用者的iOS device中的功能。任何存在于你app中的根目錄下的資料均會備份,除了應用程式本身有夾帶的bundle,cache目錄和temp目錄。可備份的包含『已購買的音樂、應用程式、書籍,相片、device的設定,主屏幕和app的組織,訊息和手機鈴聲也會備份』。

因是用無線(網路)備份的方式儲存在 iCloud ,每份資料務必為最小儲存容量。容量較大的檔案將延長執行備份的時間,並消耗更多 iCloud 上可利用的空間。

確保備份的動作盡可能的有效率,確定將儲存在你app中的資料符合下列規範:
  1. 只有用戶自主產生的資料或文件,或無法以其他的方式在app中重新創建的資料,應儲存在 <Application_Home>/Documents 路徑,並將自動備份到iCloud中。
  2. 資料能被重復下載或者重復產生等,應被儲存在<Application_Home>/Library/Caches目錄。如應該把數據緩存文件和下載內容(如:雜誌、報紙和地圖應用),放在緩存目錄中。
  3. 臨時的資料應該放在<Application_Home>/tmp目錄下,雖然這些文件不會被備份到iCloud中,但當不繼續使用這些資料時,請記得去刪除這些資料,以免佔去用戶設備的空間。
  4. 使用"不要備份"屬性來指定那些需要保留在設備中的文件(即使是低存儲空間情況下)。那些能夠重新生成,但在低存儲空間時仍需保留,對應用正常運行有影響,或者用戶希望文件在離線時可用的文件,需要使用這個屬性。無論哪個目錄下的文件(包括Documents目錄),都可以使用這個屬性。這些文件不會被刪除,也不會包含在用戶的iCloud或iTunes備份中。由於這些文件一直佔用著用戶設備的存儲空間,應用有責任定期監控和刪除這些文件。 
ps:如何防止文件被備份到iCloud上,請參閱 Learn more
For more information read the iOS App Programming Guide.



其它相關資料:

iOS 5.0.1開始支持"do not back up"文件屬性,允許開發者明確地指定哪些文件應該被備份,哪些是本地緩存可以自動刪除,哪些文件不需要備份但不能刪除。此外,對目錄設置這個屬性,會阻止備份該目錄和目錄中的所有內容。

注意"do not back up"屬性只能用於iOS 5.0.1以後版本。之前版本的應用需要存儲數據到<Application_Home>/Library/Caches目錄才能避免被備份。由於老的系統忽略這個屬性,你需要確保應用在所有iOS版本中,都遵循上面的iOS Data Storage Guidelines。

數據處理分類
com.apple.MobileBackup文件屬性就是iOS 5.0.1引入的"do not back up"特性,用於指定文件或目錄不需要備份(不管在文件系統的甚麼位置)。通過使用這個新的文件屬性,並且將文件存放在指定的目錄下,文件可以分為以下四種數據類型:s.

關鍵數據
這些是用戶創建的數據,或其它不能重新生成的數據。應該存放在<Application_Home>/Documents目錄下,並且不應該標記為"do not backup"屬性。關鍵數據在低存儲空間時也會保留,而且會被iCloud或iTunes備份。

緩存數據
可以重新下載或生成的數據,而且沒有這些數據也不會妨礙用戶離線使用應用的功能。緩存數據應該保存在<Application_Home>/Library/Caches目錄下。緩存數據在設備低存儲空間時可能會被刪除,iTunes或iCloud不會對其進行備份。

臨時數據
應用需要寫到本地存儲,內部使用的臨時數據,但不需要長期保留使用。臨時數據應該保存在<Application_Home>/tmp目錄。系統可能會清空該目錄下的數據,iTunes或iCloud也不會對其進行備份。應用在不需要使用這些數據時,應該盡快地刪除臨時數據,以避免浪費用戶的存儲空間。

離線數據
可以下載,或重新創建,但用戶希望在離線時也能訪問這些數據。離線數據應該存放在<Application_Home>/Documents目錄或<Application_Home>/Library/Private Documents目錄,並標記為"do not backup"屬性。這兩個位置的數據在低存儲空間時都會保留,而"do not backup"屬性會阻止iTunes或iCloud備份。應用不再需要離線數據文件時,應該盡快刪除,以避免浪費用戶的存儲空間。ce.


設置Do Not Backup擴展屬性
注意:"do not backup"擴展屬性可以添加到任何文件或目錄,在舊版本的系統中也能夠設置。但舊系統仍然會備份這些文件,一旦設備更新到iOS 5.0.1,這些文件會被重新正確地配置。

使用下面方法來設置"do not back up"擴展屬性。當你創建不需要備份的文件或目錄時,向文件寫入數據,然後調用下面方法,並傳遞一個文件URL。

設置擴展屬性

 
#include <sys/xattr.h>
- (BOOL)addSkipBackupAttributeToItemAtURL:(NSURL *)URL
{
const char* filePath = [[URL path] fileSystemRepresentation];

const char* attrName = "com.apple.MobileBackup";
u_int8_t attrValue = 1;

int result = setxattr(filePath, attrName, &attrValue, sizeof(attrValue), 0, 0);
return result == 0;
}



As always , if you have any question , feel free to contact me.
有任何問題,請聯絡我

歡迎轉載,請註明出處,感謝。

2012年9月15日 星期六

App Store Review Guidelines(中譯)

【環境:2012/09/15翻譯】

原文出處:App Review
說明:若有新版本請通知並加上,此篇文章為2012/09/15翻譯,翻譯的不好請見諒..給有需要參考的人參考,畢竟要玩遊戲,也必須先瞭解遊戲規則,不然功虧一潰,那還挺令人難過的。


Introduction
對於您將投入您的人力和時間去開發ios的應用程式,我們感到非常榮幸。無論是專業技術和財務上,此篇文章對於在數以萬計的開發者,都是非常有幫助的,我們希望能藉由此文章,順利幫助您加入這個成功的團隊。
apple團隊公佈的 App Store Review Guidelines 希望能帶領你快速的避開可能發生的問題和疑惑,加速批准您所提交的應用程式。

apple認為應用程式不同於書籍和音樂。若妳想批評宗教理念,或許妳應該去寫本真正的書。若你要討論性或者寫歌,或者醫藥的app。或許這有點繁瑣,但apple決定不允許這類型內容的app於app store上架。

請牢記下列原則,將會對你有所幫助:
  • 我們有很多孩子會來app store下載apps,而且除非父母們設置了家長管理(事實很多人不設置),否則孩子們是不受任何限制的。所以我們要關注孩子們。
  • 我們在app store中有超過350,000個apps。我們不需要任何差勁的app,若你的app不做任何有效的或者提供一些惡作劇娛樂性質的app (沒有提供任何持續性娛樂價值的app、譁眾取寵的app或者無聊的app),這將不被我們所接受。
  • 若你的app僅僅只是短時間內拼湊起來的應用程式,或者只是想將你的第一個練習的app放到商店中並於朋友間炫耀,在被apple審查拒絕後,請一定要停止這種行為。我們有大量認真的開發者,不希望自己有質量的app與一些業餘者的app為伍。
  • 我們將拒絕那些不論是內容或者行為都踰越界限的apps。或許妳會問,評斷的界線是?是的,就像是 Supreme Court Justice 曾說過:『我只有在當我看到時,我才會知道』。還有,我們相信當妳越線時,你自己也會知道。
  • 若你的app被拒絕時,我們將提供你一個管道去上訴,若妳發文抱怨我們,這將對你沒有任何實質上的幫助。
  • 若你企圖欺騙系統(例如:試著在審核過程中欺騙,偷取用戶資料,盜用其他開發者的作品,或者企圖操作排名系統,提升你app的知名度),你的app和開發者帳號均會被移除。
  • 此文件將被不斷的更新,因在任何時間內,新的app將產生新的規則,或許你的app可能帶來下一條新的規則。
最後,我們非常珍愛,且以你的作品為榮,為了你的作品,我們真心將平台做到全世界最好,在這裡你可以大展才華,且以此賺取利潤。
或許這些原則聽起來像個控制狂,或許是,但因為我們承諾我們的用戶,在apple的設備上確保他們的產品品質和最佳體驗,就像你也如此的希望。

Table of Contents
  1. 條款與細則
  2. 功能性
  3. 數據資料、評價級數和排行榜
  4. 定位系統
  5. 推撥通知
  6. 遊戲中心
  7. iAD(apple提供開發者放置廣告的平台)
  8. 商標和商業外觀
  9. 多媒體內容
  10. 用戶界面
  11. 購買和貨幣
  12. web頁面的收集和整合
  13. 損壞設備
  14. 人身攻擊
  15. 暴力
  16. 令人反感的內容
  17. 隱私
  18. 色情
  19. 宗教、文化和種族
  20. 競賽(賭博、抽獎和彩卷)
  21. 慈善機構和捐助
  22. 法律上所要求事項
1.條款和細則
作為一個app store的開發者,你受限於以下條款:
 Program License Agreement (PLA) Human Interface Guidelines (HIG) ,還有其他與apple簽訂的證書和協議。下列規則和範例,將幫助你的app獲得認可,而非修正或者取代其他簽訂的協議規定。
2.功能性
    1. 2.1 崩潰的程序將被拒絕。
    2. 2.2 存在明顯bug的app會被拒絕
    3. 2.3 不符合開發者描述的app會被拒絕
    4. 2.4 在審核的過程中,app的內容描述與包含未公開的且隱藏性的功能不一致,將被拒絕
    5. 2.5 app使用非公開的APIs將被拒絕
    6. 2.6 app讀取或寫入資料超出其指定的容器區域將被拒絕
    7. 2.7 app試圖以任何方式或者形式下載代碼,將被拒絕
    8. 2.8 app安裝或者執行其他可執行的代碼,將被拒絕
    9. 2.9 任何以 ”beta”、”demo”、”trial”,or ”test” 為名的版本,將被拒絕
    10. 2.10 iphone apps無須加任何修改的在ipad運行,於iphone解析度和兩倍的iphone 3GS解析度下
    11. 2.11 在app store中重複的app可能會被拒絕,特別是如果有很多的放屁、打嗝、手電筒和愛經的app
    12. 2.12 沒有用處的app,還有與簡單的web界面組合在一起的app,或者沒有提供任何持續性娛樂價值的app(譁眾取寵的app或者無聊的app),將被拒絕
    13. 2.13 僅為市場推廣或廣告的app,將被拒絕
    14. 2.14 意圖提供某種把戲或虛假的功能,並未清楚標示,將被拒絕
    15. 2.15 app大於20MB 將無法於 蜂巢式網路(3g) 下載(app store將會自動處理)
    16. 2.16 多任務的app只能使用下列行為去執行後台運行: VoIP,音頻播放,地理位置,任務記錄,本地提醒等。
    17. 2.17 app訪問web頁面,必須使用iOS WebKit Framework 和 WebKit Javascript
    18. 2.18 鼓勵酗酒、違法藥物,誘導未成年人飲酒、吸煙,將被拒絕
    19. 2.19 提供錯誤訊息或其他不准確的設備資料,將被拒絕
    20. 2.20 通過許多版本的類似應用對App Store造成干擾的開發者會被取消IDP身份。
    21. 2.21 僅僅是一首歌曲或者電影的app,應該提交到iTunes store。若唯一本書,則應提交到iBook store
    22. 2.22 於app中,隨意的透過定位或者某些設備,企圖限制用戶使用app,將被拒絕
    23. 2.23 app必須遵循 iOS Data Storage Guidelines(中譯) ,否則將被拒絕
    24. 2.24 在Newsstand(書報亭、報攤)提供的應用程序,必須符合附表1,第2和第3的DeveloperProgram許可協議,否則將被拒絕
3.數據資料、評價級數和排行榜
    1. 3.1 app中提到其他任意移動平台,將被拒絕
    2. 3.2 app中有 placeholder text 將被拒絕描述的功能就必須實現,如有些功能寫出來但還沒實現,或app跟描述有較大偏差
    3. 3.3 app中描述不相關的內容和功能,將被拒絕
    4. 3.4 app在iTunes Connect和device中顯示的名稱應該相似,否則會造成混淆
    5. 3.5 不同尺寸的icons 必須相似,否則會造成混淆
    6. 3.6 app的 app icons 和 screenshots 不遵守4+年齡級距,將被拒絕
    7. 3.7 app的類別和類型的選擇與其內容並不相關,將被拒絕
    8. 3.8 開發人員對於自己的app選擇適當的評級,不適當的評級,將被拒絕
    9. 3.9 開發人員對於自己的app選擇適當的關鍵字,不適當的關鍵字,將被拒絕
    10. 3.10 通過偽造,付費評價或其他非正規手段,獲取App Store中較好的評價與星級的開發者會被取消IDP身份。
    11. 3.11 任何提示用戶需重新啓動iOS device來安裝或運行的app,將被拒絕
    12. 3.12 app在提交審核過程中,所有涉及到的URL都要處於正常運行狀態,例如保密協議,相關支持頁面等。
4.定位系統
  1. 4.1 app並無通知用戶且獲得用戶同意下,收集、傳遞或者使用位置資料數據,將被拒絕
  2. 4.2 app使用 location-based 自動或自主去控制車輛、飛行器或其他裝置,將被拒絕
  3. 4.3 app使用 location-based 用於調度、車隊管理、緊急服務等,將被拒絕
  4. 4.4 位置資料只能用於app提供的直接相關功能或服務,或者有授權的廣告。
5.推撥通知
  1. 5.1 app提供推撥通知,但並非使用app所提供的api,將被拒絕。
  2. 5.2 app使用APN (Apple Push Notification) 伺服器,並無從apple獲取Push Application ID 的app,將被拒絕。
  3. 5.3 app寄送APN時並無取得用戶的允許,將被拒絕。
  4. 5.4 app利用APN寄送敏感的私人資料或者機密資訊,將被拒絕。
  5. 5.5 app利用APN寄送未經請求的訊息,或以發垃圾郵件、網路釣魚為目的APN,將被拒絕。
  6. 5.6 app不得利用APN寄送廣告、活動或任何形式的直接推廣方式。
  7. 5.7 app不可提供收費使用的APN。
  8. 5.8 過度使用APN服務,佔用網路頻寬或容量或通過APN大量佔用系統資源的app,將被拒絕。
  9. 5.9 利用APN傳送病毒、文件、電腦代碼或程式,可能損害或破壞APN伺服器正常運行的app,將被拒絕。
6.遊戲中心
  1. 6.1 向終端用戶或第三方展示Player ID的應用會被拒。
  2. 6.2 Player ID被用於Game Center條款款意外的用途的應用會被拒。
  3. 6.3 試圖通過Game Center反查,跟蹤,描述,關聯,發掘,收割,或利用Player ID,別名或其他信息的開發者會被取消IDP身份。
  4. 6.4 Game Center信息,例如Leaderboard得分,只能通過Game Center用於應用中。
  5. 6.5 使用Game Center發送主動消息,欺騙或干擾信息的應用會被拒。
  6. 6.6 使用Game Center過度佔用網絡帶寬或容量的應用會被拒。
  7. 6.7 傳輸病毒,文件,代碼或程序,導致破壞或擾亂正常的Game Center操作,的應用會被拒。
7.iAD
  1. 7.1 人為增加曝光次數或點擊次數,將被拒絕
  2. 7.2 含有空的廣告橫幅,將被拒絕
  3. 7.3 設計主要用來展示廣告的app,將被拒絕
8.商標和商業外觀
  1. 8.1 app必須以下遵守所有的條款和條件的解釋: Guidelines for Using Apple Trademarks and Copyrights and the Apple Trademark List
  2. 8.2 任何誤導或暗示Apple為該應用來源或提供商,或Apple以任何形式認可其質量或功能的應用會被拒。
  3. 8.3 出現任何與現存apple product或廣告議題相似或混淆的app,將被拒絕。
  4. 8.4 app名稱中出現錯誤的蘋果產品的拼寫(如,GPS for Iphone,iTunz),將被拒絕。
  5. 8.5 使用受保護的第三方資源(商標,版權,商業機密,以及其他私有內容),請提供一份文本形式的使用授權。
  6. 8.6 app經由Google Maps API獲得的google maps和google earth圖像,其品牌特徵和原本的內容均須保持不變且為明顯可見,任何覆蓋或者修改google標誌或版權所有人的識別,將被拒絕。
9.多媒體內容
  1. 9.1 app在不使用MediaPlayer framework的情況下,去存取音樂資料庫的媒體,將被拒絕
  2. 9.2 app使用者界面摹仿任何iPod界面,將被拒絕
  3. 9.3 通過蜂窩網絡傳輸的媒體音頻內容不得超過5MB或超過5分鐘。
  4. 9.4 通過蜂窩網絡傳輸超過10分鐘的媒體視頻內容,必須使用HTTP Live Streaming,並包含一條基線64kbps的音頻HTTP Live stream。
10.用戶界面
  1. 10.1 app必須遵守所有已解釋的條款和條件: Apple iOS Human Interface Guidelines
  2. 10.2 app外觀和於iPhone上自帶的app相似,包含App Store, iTunes Store, and iBookstore,將被拒絕
  3. 10.3 不按照Apple iOS Human Interface Guidelines中的描述正確使用系統控件的應用會被拒。
  4. 10.4 試圖創建備用桌面/主屏環境或模擬multi-app widget經驗的app,將被拒絕。
  5. 10.5 修改硬件開關標準功能(例如:音量,震動)的應用會被拒。
  6. 10.6 蘋果公司和我們的用戶都非常期待app擁有簡單、精緻、富創造性和深思熟慮的用戶體驗界面,做到這些必須付出非常大的努力,但卻很值得。apple對於此設置了很高的門檻。若你的使用者介面過於複雜或者不夠好,將被拒絕。
11.購買和貨幣
  1. 11.1 app以透過其他方法,非經由app store以外的方法解鎖或開啓額外特徵或功能,將被拒絕。
  2. 11.2 app透過非 In App Purchase API(IAP) 的功能購買內容、功能或者服務,將被拒絕。
  3. 11.3 app透過IAP購買與應用程式無關的實體商品、產品和服務,將被拒絕。
  4. 11.4 app透過IAP購買信貸或其他貨幣,必須在app中消費使用。
  5. 11.5 app透過IAP購買已過期的信貸或其他貨幣,將被拒絕
  6. 11.6 使用IAP收費訂閱的內容至少要在7天內有效,而且允許在所有iOS設備間共享。
  7. 11.7 用到IAP收費項目的應用必須分派到正確的收費類目中。
  8. 11.8 使用IAP向用戶收費以獲取iOS內建功能(如攝像頭,陀螺儀)的應用會被拒。
  9. 11.9 app含有『出租』內容或會在限定時間內到期的服務,將被拒絕。
  10. 11.10 保險類的app必須是免費的,須遵守發佈地區的法律,且不能使用IAP。
  11. 11.11 一般來說,越貴的app,審核就會越仔細。
  12. 11.12 提供收費訂閱的app必須使用IAP,Apple將會按照Developer Program License Agreement中約定的70/30的比例與開發者分賬。
  13. 11.13 app中如果提供了IAP以外的收費或訂閱機制,如:“buy”按鈕,跳轉到一個購買電子書的web頁面,將被拒絕。
  14. 11.14 app能閱讀和播放已有授權的內容(如:雜誌、新聞、書籍、影音),這些內容可容許非由此app購買或訂閱,只要那些須購買的授權內容並非經由app中的按鈕或者外部連結等方法。蘋果公司將不接受於app外訂閱或購買的授權項目任何部份的收入。
12.web界面的收集與整合
  1. 12.1 從Apple的頁面(如:apple.com, iTunes Store, App Store, iTunes Connect, Apple Developer Programs, 等)抓取內容,或利用Apple頁面和服務中的內容進行排名,將被拒絕。
  2. 12.2 應用可以使用授權的Apple RSS,例如iTunes Store RSS。
  3. 12.3 簡單的web頁面裁剪,內容整合或鏈接收集,將被拒絕。
13.損壞設備
  1. 13.1 app鼓勵用戶去使apple device損壞的行為,將被拒絕
  2. 13.2 快速耗光設備電力或產生大量熱量,將被拒絕。
14.個人攻擊
  1. 14.1 任何涉嫌誹謗,侮辱,狹隘內容或打擊個人或團體,將被拒絕。
  2. 14.2 職業為政治諷刺家和幽默作家不受該條款約束。
15.暴力
  1. 15.1 展示人或動物被殺戮,致殘,槍擊,針刺或其他傷害的真實圖片,將被拒絕。
  2. 15.2 描述暴力或虐待兒童,將被拒絕。
  3. 15.3 遊戲中的“敵人”不能單獨的設定為某特定比賽,文化,真實的政府或組織,或者任何現實事物。
  4. 15.4 含有以鼓勵非法或魯莽使用的方式描述真實武器,將被拒絕。
  5. 15.5 帶有俄羅斯輪盤的賭博遊戲,將被拒絕。
16.不良內容
  1. 16.1 app呈現過於令人反感或粗糙的內容,將被拒絕。
  2. 16.2 設計來惹怒或惡心用戶的應用會被拒。
17.隱私
  1. 17.1 app不得在用戶未經許可的情況下傳送用戶資料,且必須提供用戶將何處及如何被使用這些資訊。
  2. 17.2 app因某些功能而要求用戶分享個資,如:email、地址、生日,將被拒絕。
  3. 17.3 專門收集未成年人的資料,將被拒絕。
18.色情
  1. 18.1 app含有色情內容,韋氏詞典中有“定義明確的描述或顯示性器官或活動,旨在刺激,而不是審美​​情感和情緒的色情”,將被拒絕。
  2. 18.2 app中經常有用戶提供色情內容(例如:Chat Roulette apps),將被拒絕。
19.宗教、文化與總族
  1. 19.1 帶有對一種信仰,文化或種族進行誹謗,侮辱,狹隘,或以他們為目標的暴力或傷害內容的應用會被拒。
  2. 19.2 應用若帶有或應用對一種信仰的文字描述,那麼這個引用或翻譯必須是精確,無歧義的。注釋內容可以具有教育性,信息性,但不可以為煽動性。
20.競賽(賭博、抽獎和彩卷)
  1. 20.1 賭博和競賽必須是由應用開發者或所有公司發起的。
  2. 20.2 應用中必須展示賭博和競賽的官方條款,並聲明Apple不是發起者,並且在任何情況下與此事無關。
  3. 20.3 開發者必須經過法律允許才能上線一款抽奬應用,而且抽奬應用必須具備以下要素:報酬,機會,和奬金。
  4. 20.4 直接允許用戶在應用中購買彩票或抽奬的應用會被拒。
21.慈善機構與捐助
  1. 21.1 含有向已認證的慈善機構捐助功能的應用必須是免費的。
  2. 21.2 慈善募捐必須通過短信息或通過Safari訪問web頁面完成。
22.法律上所要求事項
  1. 22.1 應用必須遵守所有發佈地區當地法律。開發者有義務瞭解和遵守各地的法律。
  2. 22.2 任何帶有虛假,欺詐和帶有歧義的描述的應用會被拒。
  3. 22.3  任何召集,推銷和股東犯罪和魯莽行為的應用會被拒。
  4. 22.4 非法文件共享應用會被拒。
  5. 22.5 任何設計用來非法賭博,包括算牌,的應用會被拒。
  6. 22.6 提供匿名電話或短消息/彩信功能的應用會被拒。
  7. 22.7 任何開發暗中獲取用戶密碼和私有數據的開發者會被取消IDP身份。
  8. 22.8 任何非法律執行部門發佈的帶有DUI檢查點信息,或鼓勵且協助酒後駕車的應用會被拒。
Living document
此Guidelines代表我們盡最大的努力,分享我們如何審查提交到app store的app,我們希望這文件對於您app的開發和上傳審核是一個有用的指南。
這是一個會變更的文件(動態文檔),因新的應用程式會有新的狀況,此文件將會定期更新,以反應這些新的變化狀況。
感謝您致力於開發iOS。雖然這份文檔是告訴開發者什麼不該越矩的一份艱鉅列表,但也同時謹記該做的那份更短的列表。
更重要的是,加入我們並試著帶給用戶驚奇和喜悅。展示世界最具創意的方式給用戶,並讓用戶體驗前所未有的生活方式。
根據我們的經驗,用戶真的會對功能和界面的改善有所反應。
好事多磨,給予用戶超出他們所期待的,帶給用戶前所未有的體驗。我們蓄勢待發的等待您隨時需要我們協助的時候。
© Apple, 2012



As always , if you have any question , feel free to contact me.
有任何問題,請聯絡我

歡迎轉載,請註明出處,感謝。

2012年7月11日 星期三

實現Custom URL Schemes

【環境:xCode4.3.2 , ios5.1 , USE ARC】
參考來源:Implementing Custom URL Schemes
說明:
URL Schemes,通常運用在從自己的app,透過NSURL溝通其他app時,的一個機制。
<URL Schemes的介紹請參考:ios URL Scheme Reference>

Registering Custom URL Schemes


在這邊就不多做說明,先來說明設定方式,如圖:

到TARGETS->info中新增一個Add URL TYPE
並在其中添加相關資訊,如圖:
在圖中需要注意的只有:identifier、URL Schemes、Role
其它如icon...等,其實不怎麼重要,唯一可能就是若你的app提供多個第三方app跳轉,那除了文字之外,直接可以用圖片去選擇,你要開啓的外部app。
最重要的就是你的URL Schemes,這就是其他app呼叫你的app時,必須提供的辨識名稱,若你的app不需被呼叫,或者呼叫後,不須由其他app返回,基本上就不需要設定。



Handling URL Requests


設定好相關資訊後,重點就是處理返回的URL Requests。
可以根據下列方法去實現:


其中application:didFinishLaunchingWithOptions:是負責判斷該app是否被呼叫,若return YES,則application:openURL:sourceApplication:annotation:或者application:handleOpenURL:就會被執行,然後開始處理傳遞過來的URL,如圖6-2。<至於如何傳遞可參考:app溝通其他外部程式(一)>






若你的app正在運行,只是在後台暫停運行,當你的url到達時,系統就會直接調用application:openURL:sourceApplication:annotation:,若你的系統沒有實現該方法,則會調用application:handleOpenURL:,故這兩個方法可以同時存在,系統會自動判斷目前的ios版本是否4.2之後或者4.1之前。如圖6-3:


Note: Apps that support custom URL schemes can specify different launch images to be displayed when launching the app to handle a URL. For more information about how to specify these launch images, see “Providing Launch Images for Custom URL Schemes.”
若要使用URL Scheme圖片,就請參考Note


所有的資訊均會透過url去傳遞到其他的app,你可以參考<NSURL根據RFC 1808下的解析方式>,去制定你的url。
關於程式的參考,可以參考本文開頭,官方所寫文件,其中有範例,或者參考<app溝通其他外部程式(一)>




注意:一定要驗證你的url,不管是傳進還是傳出,驗證的方式很多種,包含加密,可以參考apple  “Validating Input And Interprocess Communication” inSecure Coding Guide 去處理你的url,以避免問題發生。
關於NSURL Scheme reference請參考:ios URL Scheme Reference




As always , if you have any question , feel free to contact me.
有任何問題,請聯絡我

歡迎轉載,請註明出處,感謝。

NSURL根據RFC 1808下的解析方式

【環境:xCode4.3.2 , ios5.1 , USE ARC】
參考資料:RFC 1808 文件How to Parse an NSURL Object
說明:
ios在URL的使用下,除了可以利用URL Scheme的方式,呼叫外部app,或者開啟iTunes等應用<相關文章:ios URL Scheme Referenceapp溝通其他外部程式(一)>,還可以依照RFC 1808的規則,去解析URL的成分。

<scheme>://<net_loc>/<path>;<params>?<query>#<fragment>

根據規則,可以解析URL的成分,如下:
 
NSURL *url = [NSURL URLWithString:
 @"http://some-site.com:999/dir1/dir2;param?field-1=value-1&field-2=value-2#anchor1"];
 
NSLog(@"Scheme: %@", [url scheme]); 
NSLog(@"Host: %@", [url host]); 
NSLog(@"Port: %@", [url port]);     
NSLog(@"Path: %@", [url path]);     
NSLog(@"Relative path: %@", [url relativePath]);
NSLog(@"Path components as array: %@", [url pathComponents]);        
NSLog(@"Parameter string: %@", [url parameterString]);   
NSLog(@"Query: %@", [url query]);       
NSLog(@"Fragment: %@", [url fragment]);

The output is shown below:






As always , if you have any question , feel free to contact me.
有任何問題,請聯絡我

歡迎轉載,請註明出處,感謝。

app溝通其他外部程式(一)

【環境:xCode4.3.2 , ios5.1 , USE ARC】
參考來源:Communicating with Other Apps


說明:
透過NSURL和UIApplicetion的功能,可以呼叫外部的應用程式。
其中todolist為URL Scheme,是讓應用程式間,彼此知道對方代號的名稱


Note: If more than one third-party app registers to handle the same URL scheme, there is currently no process for determining which app will be given that scheme.
這是Guide中特別標示的一段,表示若多個app均用相同的URL scheme,則目前無法判斷。
有趣的是,國外網站有做一個搜尋目前已經使用過的scheme,目的就是為了盡量避免使用相同的scheme,並且幫助他們建立數據庫:Zwapp


關於URL scheme的介紹,可參考:ios URL Scheme Reference


//使用下方的語法,就可以透過你的app去呼叫外部的應用程式,但前提是必須取得外部應用程式的URL Scheme,才可以呼叫得到。 
NSURL *myURL = [NSURL URLWithString:@"todolist:"];
//『todolist』就是外部app的URL Scheme
[[UIApplication sharedApplication] openURL:myURL];

至於如何呼叫外部app後,做一些事情後,再返回原本的app?


若要帶一些參數呢??

<解析回傳的URL使用方式請參考:NSURL根據RFC 1808下的解析方式>


若想要返回dic的資料呢??


ios提供給我們一個很好的方法,就請參考下一篇文章:app溝通其他外部程式(二)


ps:
要注意的有:從外部app返回後,是返回最後app關到背景的頁面,無法指定跳到任意頁面。
除非動一點小手腳,這邊可以參考UIApplicationDelegate Protocol Reference有興趣的,可以參考,這邊就不多做討論。

As always , if you have any question , feel free to contact me.
有任何問題,請聯絡我

歡迎轉載,請註明出處,感謝。

2012年7月10日 星期二

ios URL Scheme Reference

【環境:xCode4.3.2 , ios5.1 , USE ARC】
參考文檔:Apple URL Scheme Reference.


說明:
首先我們在app應該常見到很多功能像是:直接從app中開啓信箱、撥打電話、寄送sms、開啓地圖、開啓youtube、開啓itunes...等等功能,其實都是透過URL scheme去操作。
例如,如果你的IOS應用程序顯示的電話號碼,只要點擊該號碼,app就可以直接撥打電話。同樣,點擊iTunes的鏈接,啟動iTunes應用程序和播放鏈接指定的歌曲。


如果你想從你的IOS應用程序,或從在Safari上運行的頁面,啟動一個系統的應用,你可以閱讀此文件。文件包含使用openURL:UIApplication對象共享的方法,以打開的URL和HTML範例。
欲了解更多信息:就要參考openURL:的使用方法,還有UIApplication Class Reference


其中apple也提供了許多的方法,去讓你的app呼叫其他的內建application。請參考:

這邊可以查到是否你的URL Scheme是否有跟別人重復:Zwapp
基本上寫入自己的bundle identifier就不會重復到。

As always , if you have any question , feel free to contact me.
有任何問題,請聯絡我

歡迎轉載,請註明出處,感謝。

2012年7月9日 星期一

ARC專案中,針對單一檔案『取消arc的使用』

【環境:xCode4.3.2 , ios5.1 , USE ARC】
說明:
因為ios版本更新速度,舊的sdk等等,本來就不是用ARC去編寫,這樣讓使用者會有很多困擾,所以開發者中心亦提供此種方法,讓使用者可以在ARC的專案環境下,同時使用非使用ARC的SDK,主要利用 -fno-objc-arc 指令的使用
路徑位置:Targets -> Build Phases -> Compile Sources. 




As always , if you have any question , feel free to contact me.
有任何問題,請聯絡我

歡迎轉載,請註明出處,感謝。

ios5 use Twitter & Accounts framework

【環境:xCode4.3.2 , ios5.1 , USE ARC】
參考資源:
twitter開發者頁面
ios Twitter framework
The Accounts and Twitter Framework on iOS 5 by Peter Friese
The official Twitter framework example from Apple is available for download.

說明:此篇文章包含兩個按鈕,方法是使用ios 5的twitter app,你可以在手機中的ios 5設定中的Twitter按鈕中設定帳號資訊,並啓用,接下來你可以去你twitter帳戶中看到,如圖:

表示你的帳戶已經啓用該ios的應用程式,此文章是利用這個應用程式權限的使用,去做twitter的操作。
ps:twitter另有別的方法可以用你自己申請的twitter app,當作基本權限的取用設定,有興趣可以去ios Twitter framework,使用的流程類似facebook SDK

此教學程式,一個按鈕為驗證是否使用該帳號連接你自己的app,如下,若確定使用,則按鈕無效果。


另一個為發送tweet,若無帳號,則要求帳號,若有帳號未開啟app權限,則提示使用者,如下。


Start:


step1:加入 framework :

step2: 寫入相關必要資訊
#import <Twitter/Twitter.h>
#import <Accounts/Accounts.h>
@property (strong, nonatomic) ACAccountStore *accountStore; 
@property (strong, nonatomic) NSArray *accounts;
@synthesize accounts = _accounts;
@synthesize accountStore = _accountStore;

此為第一個按鈕

#pragma mark - login
- (void)login_twitter
{
    [self fetchData];
}

- (void)fetchData
{
    if (_accounts == nil) 
    {
        if(_accountStore == nil) 
        {
            self.accountStore = [[ACAccountStore alloc] init];
        }
        ACAccountType *accountTypeTwitter = [self.accountStore accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierTwitter];
        
        [self.accountStore requestAccessToAccountsWithType:accountTypeTwitter 
                                     withCompletionHandler:^(BOOL granted, NSError *error) {
                                         if(granted) 
                                         {
                                             dispatch_sync(dispatch_get_main_queue(), ^{
                                                 self.accounts = [self.accountStore accountsWithAccountType:accountTypeTwitter];
                                                 
                                             });
                                              
                                         }
                                         else { 
                                             // User denied access to his Twitter accounts 
                                             NSLog(@"用戶拒絕使用twitter帳戶連接app");
                                         }
                                     }
         ];
    } 
    else 
    { 
        // This iOS verion doesn't support Twitter. Use 3rd party library 
    }
    
}

第二個按鈕
#pragma mark - tweet

- (void)send_tweet
{
    //建立viewcontroller
    TWTweetComposeViewController *tweetTOtwitter = [[TWTweetComposeViewController alloc] init];
    
    //設定推文的內容
    [tweetTOtwitter setInitialText:@"N11 Studio Twitter API 測試。"];
    
    //推文中加入圖片資訊
    [tweetTOtwitter addImage:[UIImage imageNamed:@"logo.png"]];
    
    //推文中加入網址超連結資訊
    [tweetTOtwitter addURL:[NSURL URLWithString:[NSString stringWithString:@"http://n11studio.blogspot.tw/"]]];
    
    //顯示viewcontroller
    [self presentModalViewController:tweetTOtwitter animated:YES];
    
    //按下Send或是Cancel時的處理動作(block)
    [tweetTOtwitter setCompletionHandler:^(TWTweetComposeViewControllerResult result) {
        NSString *tweet_action;
        
        switch (result) {
            case TWTweetComposeViewControllerResultCancelled:
                tweet_action = @"取消";
                break;
                
            case TWTweetComposeViewControllerResultDone:
                tweet_action = @"完成";
                break;
                
            default:
                break;
        }
        
        
        NSLog(@"%@", tweet_action);
        
        //移除viewcontroller
        [self dismissModalViewControllerAnimated:YES];
    }];
}

As always , if you have any question , feel free to contact me.
有任何問題,請聯絡我


歡迎轉載,請註明出處,感謝。

2012年7月5日 星期四

IOS 使用 facebook SDK 教程(二)『Adding Social Context』


相關文章更新:2012/12/21

【facebook SDK 3.1】what is NEW?

【facebook SDK 3.1】教程1-設定

【facebook SDK 3.1】教程2-登入,認證,登出



==請改用sdk 3.1==


【環境:xCode4.3.2 , ios5.1 , USE ARC】
說明:
說明:此教程主要為facebook 2012 08後,官方提供的主要流程。
此教程為文件中的『Adding Social Context』,理解後的教學執行方式。
在這篇文章中,可以學到如何取得用戶社交圈的各類資訊,和如何使用『分享』、『邀請』等facebook常見功能。
建議將IOS 使用 facebook 教程『Getting Started』理解後,再來觀看文章。
官方網站教程:http://developers.facebook.com/docs/mobile/ios/build/#graph

Step 6: Using the Graph API


Facebook Graph API 提供一種簡單的、一致性的Facebook social graph使用方法,此種方法可以取得用戶的社交圈的各類資訊(e.g., people, photos, events, and fan pages) and the connections between them (e.g., friend relationships, shared content, and photo tags)

你可以透過此種方法(Graph API )去請求相關你想要的訊息,例如:用戶資訊
 
// get information about the currently logged in user
[facebook requestWithGraphPath:@"me" andDelegate:self];

// get the posts made by the "platform" page
[facebook requestWithGraphPath:@"platform/posts" andDelegate:self];

// get the logged-in user's friends
[facebook requestWithGraphPath:@"me/friends" andDelegate:self];

請將你的程式碼加入FBRequestDelegate的協議(protocol),這樣才可以去處理你所請求的回應(your request responses)。
注意:server適用json去傳遞回應你的請求,facebook SDK中已經有這個JSON library。
所以若你的程式碼中,必須包含request:didFailWithError:避免解析錯誤的狀況發生。

『回應請求』若成功,程式就會呼叫request:didLoad:,『回應』傳遞的delegate可能為NSArray、NSDictionary。

ps:基本上你加入一個按鈕,然後請求其中一個回應,並加入FBRequestDelegate的協議,並加入下列code:
 
- (void)request:(FBRequest *)request didReceiveResponse:(NSURLResponse *)response {
    NSLog(@"received response");
}
就可以看到你的回應已經成功。



你的app也可以根據自己的需求,去解析自己善用的方式。


Step 7: Integrating with Social Channels


Social Channels能使用戶去po文到他們朋友的牆上或者寄送邀請給他人,facebook SDK提供方法經由Facebook Platform dialogs去整合social channels ,目前支援的dialogs有以下:
  • Feed Dialog - the dialog used for publishing posts to a user's News Feed.(分享)
  • Requests Dialog - the dialog used to send a request to one or more friends.(寄送邀請)
這允許你的app去提供基本的facebook功能,不需要去建立native dialogs, make API calls, or handle responses.詳細請參閱mobile distribution guide
要使用此功能,請在你的class中加入『FBDialogDelegate』的協議(protocol),這樣才可以使用dialog的功能。

Requests

Requests』是最好的方法使用戶邀請他們的朋友去使用你的app,你的app可以使用『Request dialog』讓用戶邀請朋友去使用你的app。
若用戶的裝置支援此功能,每當朋友發送請求,除了他們一般在Facebook中的通知,他們將獲得Facebook的本機應用程序推送通知。
 
    NSMutableDictionary* params = [NSMutableDictionary dictionaryWithObjectsAndKeys:
                               @"Come check out my app.",  @"message",
                               nil];

    [facebook dialog:@"apprequests"
                  andParams:params
                andDelegate:self]; 

News Feed

這就是大家所熟悉的『分享』功能。
使用方法如下:
 
[facebook dialog:@"feed" andDelegate:self];

Timeline and Open Graph

這個部分有興趣就到官網看吧,這邊不多做介紹。





As always , if you have any question , feel free to contact me.
有任何問題,請聯絡我

歡迎轉載,請註明出處,感謝。