Facebook的SDK爲iOS提供了各類登陸的經驗,你的應用程序可使用它來 驗證一我的。這份文件包括了全部你須要知道,以落實Facebook登陸在你的iOS應用程序的信息。若是您想了解更多關於Facebook登陸通常而言,爲何你可能想使用它,你能夠在咱們這樣作的登陸門戶。php
有兩種方式能夠實現Facebook登陸在你的iOS應用方法:使用Facebook的登陸按鈕,或者實現你使用API調用自定義登陸界面。咱們將介紹這兩個步驟一步的教程,包括示例代碼和示例應用程序,您能夠從Github上下載。這些教程將幫助您的登陸執行實際的一面。若是你想得到Facebook的會議是如何工做的一個更深刻的瞭解,咱們將介紹在一個單獨的部分。ios
其中一個讓人們使用Facebook的登陸到您的應用程序的好處是,他們能夠將權限授予您的應用程序使您能夠檢索信息或代其執行在Facebook的行動。該文件還提供了關於如何的信息管理權限綁在Facebook的會話。git
Facebook的會話和權限存儲在訪問令牌,它會自動經過Facebook的SDK以便他們可當登陸的用戶返回到您的應用程序緩存。可是,若是你想這樣作,咱們將解釋如何作到這一點,您能夠管理本身的令牌緩存在這裏。github
在本節中:api
Facebook的SDK爲iOS提供了能夠用來登陸的人在你的應用程序的進出預構建UI組件。爲了驗證用戶,這些控件撥打電話到用戶的Facebook應用程式或將回落到使用網頁對話框,若是用戶沒有安裝一個Facebook應用程序。
FBLoginView
是在Facebook的SDK,能夠處理大量的幫助用戶登陸和註銷複雜的控件。它顯示一個用戶界面按鈕意識到人的登陸狀態,並會自動顯示相應的提示信息,「登陸」或「退出」,這取決於使用它的人是否被認證與否,就像這樣:
當人們點擊註銷按鈕,它們被顯示的動做片,讓他們確認,他們想退出:
本教程介紹瞭如何使用Facebook的使用FBLoginView UI控件實現登陸。此處顯示的示例代碼屬於FBLoginUIControlSample應用程序。若是你想看到此示例的完整代碼,你能夠找到它github.com / fbsamples / IOS-HOWTO文檔。然而,本教程是自包含的,你不須要檢查出的應用程序代碼,以便可以遵循它。
注意:若是您正在實施的Facebook登陸在你的應用程序,你可能要檢查是否有從之前的會話遺留下來的有效的訪問令牌和他們無需觸碰登陸按鈕會自動驗證用戶的身份。要了解更多關於如何記錄你的用戶在使用緩存的令牌做品您能夠訪問咱們的理解會話嚮導。要找到一個示例實現,與代碼,您能夠參考咱們的自定義UI登陸教程。
在開始以前本教程中,您將須要:
若是你尚未這樣作,須要幫助這樣作,你能夠按照咱們的入門指南。
你能夠經過編程方式或圖形添加登陸按鈕。
首先,Facebook的適用於iOS的SDK頭文件添加到您的控制器代碼:
#進口<FacebookSDK/FacebookSDK.h>
而後,你能夠建立一個登陸按鈕中的任何視圖控制器用下面的代碼:
FBLoginView * 的LoginView = [[ FBLoginView 的alloc ] 初始化] [ 自我。視圖addSubview :登陸視圖];
只要你喜歡你能夠定位和大小的按鈕。例如,下面的代碼對準在中心水平的按鈕:
FBLoginView * 的LoginView = [[ FBLoginView 的alloc ] 初始化] / /對齊按鈕,在中心 addSubview :登陸視圖];
您能夠添加圖形採用了iOS界面生成器的登陸UI控件。要添加的UI控件,請執行如下操做:
視圖
對象來佈局。如你願意,你能夠調整其大小。FBLoginView
更改後,你的佈局應該相似這樣:
注:在Facebook的SDK 3.7.x及更早的版本中,登陸UI控件不支持使用自動佈局約束。你將須要定義其佈局的老辦法,經過設置大小督察的自動尺寸調整掩碼中的彈簧和支柱。
設置您的佈局後,進行如下更改到的調用時,您的應用程序啓動代碼。這些變化請確保FBLoginView
類被加載的視圖顯示以前:
- (BOOL )應用:(的UIApplication *)的應用 didFinishLaunchingWithOptions :(NSDictionary中 *)launchOptions { 。後啓動應用程序/ /覆蓋點進行定製 [ FBLoginView 類] ... 返回YES ; }
注意:若是你已經添加了-ObjC的
標誌,你的連接器選項,那麼你就沒必要添加此代碼。並稱,標誌會致使連接器加載在Facebook的SDK中全部的目標文件,包括FBLoginView
類。若是你想知道更多關於什麼的,ObjC的
標誌呢,你能夠看看咱們的故障排除指南。
處理您從與Facebook登陸過程的互動獲得響應,你須要重寫應用程序:的OpenURL:sourceApplication:註釋:
方法在你的應用程序委託中加入如下代碼:
- (BOOL )應用:(的UIApplication *)的應用 的OpenURL :(NSURL *)網址 sourceApplication :(的NSString *)sourceApplication 註釋:(ID )註釋{ / /調用FBAppCall的handleOpenURL:sourceApplication處理Facebook應用程序的響應 BOOL wasHandled = [ FBAppCall handleOpenURL :網址sourceApplication :sourceApplication ]; / /若是須要,能夠在這裏添加你的應用程序特定的URL處理代碼 返回wasHandled ; }
當有人使用Facebook登陸的應用程序進行鏈接時,應用程序能夠訪問任意要求讀取數據的那我的可能已經加入到Facebook的一個子集。例如,包含在他們的信息的公衆形象是可用的背後public_profile
許可。一樣,全部其餘部分的信息,有人增長了他們的Facebook的我的資料做抵押落後於其餘的讀取權限。例如,一我的的主電子郵件地址是經過訪問電子郵件
的權限。
除了 讀取數據,應用程序還須要獨立的,以發佈內容表明我的的發佈權限。這些都是分開的,讓你讀一我的的信息的讀取權限。人們經常對授予發佈權限很是敏感的,因此你應該只要求對發佈權限,一旦一我的已經準備好從發佈你的應用程序和一些不能在初始登陸過程。登陸控制使得這個容易被分離的讀取權限和發佈權限。若是您想了解更多有關權限,你能夠看看咱們的權限一節。
下面是要求一個例子電子郵件
,public_profile
和user_friends
讀取權限。若是您正在建立的控制編程這是有用的:
FBLoginView * loginView = [[ FBLoginView alloc ] initWithReadPermissions : @[@ "public_profile" , @ "email" , @ "user_friends" ]];
另外,若是您使用的是FBLoginView
經過界面生成器能夠經過設置讀取權限readPermissions
的物業FBLoginView
實例:
/ /在你看來頭文件: @財產 (弱,非原子) IBOutlet FBLoginView * 的LoginView ; / /在你的viewDidLoad方法: 自我。的LoginView 。readPermissions = @ [@ 「public_profile」 , @ 「電子郵件」 , @ 「user_friends」 ];
若是你的應用要求超過public_profile
,電子郵件
和user_friends
,那麼它將不得不經過Facebook的審查能夠提供給廣大市民面前。請參閱咱們的評論文檔獲取更多信息。
FBLoginView
保持認證狀態。這意味着,該按鈕會顯示相應的標籤並進行登陸或註銷時,它的挖掘。的另外一個特色FBLoginView
是它獲取的公衆形象時,登陸的公衆形象取人登陸後的典型要求的應用程序提出的,UI控件會自動執行此操做。
您能夠對影響的事件接收通知FBLoginView
由符合FBLoginViewDelegate
協議並實施某些方法。那麼你的表明將得到如下事件的通知:
FBLoginView
已提取的公衆形象。若是你實現了你的應用程序被通知loginViewFetchedUserInfo:用戶:
委託方法。loginViewShowingLoggedInUser:
方法。loginViewShowingLoggedOutUser:
委託方法。的LoginView:handleError的:
委託方法。爲了向你展現如何將這些回調的工做,咱們已經建立了一個例子,其中包含三個視圖控制器網點
:一種用於顯示人的我的資料圖片時,該人已登陸,第二個要顯示本身的名字時,他們在已經登陸,而第三個顯示狀態(「你的身份登陸」或「你沒有登陸!」)。咱們的應用程序的UI看起來像這樣:
而咱們的界面看起來像這樣:
@interface LoginUIViewController () @property ( strong , nonatomic ) IBOutlet FBProfilePictureView * profilePictureView ; @property ( strong , nonatomic ) IBOutlet UILabel * nameLabel ; @property ( strong , nonatomic ) IBOutlet UILabel * statusLabel ; @end
注意:若是你想看到這些例子的完整代碼,或查看運行中的登陸控件,您能夠從檢出FBLoginUIControlSample應用程序github.com / fbsamples / IOS-HOWTO文檔。然而,本教程是自包含的,你不須要檢查出的應用程序代碼,以便可以遵循它。
要設置委託方法,首先添加FBLoginViewDelegate
你的類的協議列表。
@接口 LoginUIViewController : 的UIViewController < FBLoginViewDelegate >
接着,分配委託給你的視圖控制器類。
若是以編程方式定義的登陸UI控件,修改代碼以執行如下操做:
FBLoginView * 的LoginView = [[ FBLoginView 的alloc ] 初始化]; LoginView控件。委託 = 自我; ...
若是你定義使用Interface Builder的登陸UI控件:
視圖
表示登陸按鈕。委託
出口到文件的全部者。而後,執行可選的委託方法。
實施loginViewFetchedUserInfo:用戶:
委託方法可讓您我的觸摸到你的應用程序。在這個例子中,在返回的用戶數據FBGraphUser
對象是用來設置用戶的配置文件圖像,並設置其名稱:
/ /這個方法會被調用,當用戶信息被取出 - (無效)loginViewFetchedUserInfo :(FBLoginView *)的LoginView 用戶:(ID < FBGraphUser >)用戶{ 自我。profilePictureView 。配置文件ID = 用戶。標識; 自我。nameLabel 。文字= 用戶。名; }
實施loginViewShowingLoggedInUser:
委託方法容許您修改您的應用程序的UI來顯示記錄中的經驗。在下面的例子中,咱們通知他們改變狀態登陸的用戶:
/ /登陸的用戶體驗 - (無效)loginViewShowingLoggedInUser :(FBLoginView *)的LoginView { 自我。statusLabel 。文字= @ 「你的記錄爲」 ; }
實施loginViewShowingLoggedOutUser:
委託方法容許您修改您的應用程序的UI來顯示記錄的實踐經驗。在下面的例子中,用戶的我的資料圖片被刪除,用戶的名稱設置爲空白,且狀態被改變,以反映不登陸的用戶:
/ /登出用戶 沒有登陸!「 ; }
最後,實施的LoginView:handleError的:
委託方法能夠檢測並優雅地應對錯誤。請參見API文檔的錯誤就可能驗證錯誤,並建議恢復策略的更多細節。
在這個例子中,使用您的應用程序的人被告知,若是:*他們須要你的應用程序以外執行一個動做,從錯誤中恢復(例如,若是登陸嘗試失敗,由於用戶的Facebook密碼已更改,或他們的Facebook賬戶未驗證)*會話再也不有效(例如是用戶從Facebook的用戶界面退出你的應用程序)*對於任何其餘錯誤,但若是用戶拒絕您的應用程序所要求的權限
/ /處理可能發生在登陸過程當中可能出現的錯誤 - (無效)的LoginView :(FBLoginView *)的LoginView handleError的:(NSError *)錯誤{ 的NSString * alertMessage , * alertTitle ; / /若是用戶要的你以外執行操做的應用程序恢復, / / SDK將提供給用戶一個信息,你只須要浮出水面了。 / /這個方便地處理像Facebook密碼變動或未經覈實的Facebook帳戶的狀況。 若是 ([ FBErrorUtility shouldNotifyUserForError :錯誤]) { alertTitle = @ 「Facebook的錯誤」 ; alertMessage = [ FBErrorUtility userMessageForError :錯誤]; / /此代碼將處理髮生在應用程序以外會話關閉 / /你能夠看看咱們的錯誤處理指南,多瞭解 錯誤「 ; alertMessage = @ 「你的當前會話再也不有效。請從新登陸「。; / /若是用戶已經取消了登陸,咱們不會作任何事情。 / /你也能夠選擇向用戶顯示一條消息,若是取消登陸將致使 / /用戶不可以完成任務,他們已經在你的應用程序啓動 / /(如訪問FB-存儲的信息或張貼到 註銷登陸「 ); / /爲了簡單起見,此示例處理與一個通用的消息其餘錯誤 / /能夠檢出咱們的錯誤處理指南更詳細的信息 / / https://developers.facebook.com/docs/ios/errors } 不然 { alertTitle = @ 「出事了」 ; alertMessage = @ 「請稍後再試。」 ; 的NSLog (@ 「意外的錯誤:%@」 ,錯誤); } 若是 (alertMessage ) { [[[ UIAlertView 的alloc ] initWithTitle :alertTitle 消息:alertMessage 表明:零 cancelButtonTitle :@ 「肯定」 otherButtonTitles :無] 秀]; } }
按照咱們的測試您的登陸流程指南,以確保您的應用程序的登陸將在一系列共同的條件下工做。
有關添加登陸到您的iOS應用程序的更多信息,請參見如下內容:
在本節中:
本教程將引導您如何使用本身的自定義用戶界面的登陸和註銷的控件添加Facebook登陸到您的應用程序。經過這種方式,你能夠留在你的應用程序的外觀和感受的控制,並提供一致的用戶體驗。
要實現這一點的登陸,咱們將使用Facebook的SDK的核心對象之一:FBSession
。該FBSession
對象用於驗證用戶和管理用戶的會話。打開會話將啓動認證流程以後,一個有效的用戶會話應提供並隨後緩存在一個訪問令牌的形式。緩存的訪問令牌,當仍然有效,能夠被用來從新打開一個會話的任什麼時候間。關閉會話註銷用戶,並能夠選擇性地清除緩存的令牌。當一個應用程序能夠建立FBSession的實例,並管理它們自己,FBSession提供傭工,以簡化具備單一登陸的人一個應用程序的常見的場景。咱們將在這裏使用這些傭工。若是您想了解更多關於Facebook的會議是如何工做的,你能夠閱讀咱們的理解會話部分。
本教程介紹了一個簡單的用例,用戶會看到一個自定義的登陸/註銷按鈕,用戶能夠觸摸來切換他們的身份驗證狀態。當用戶登陸時,咱們將向而後登陸的用戶界面,它包含一個歡迎信息和改變按鈕的標題爲「退出」,當用戶註銷後,咱們會向他們展現一個註銷確認消息和一個「經過Facebook登錄「按鈕,以下所示:
咱們也會檢查是否有緩存的會話,當用戶打開該應用程序,以便自動登陸,若是可能的用戶。所示的示例代碼屬於FBLoginCustomUISample應用程序。若是你想看到此示例的完整代碼,你能夠找到它github.com / fbsamples / IOS-HOWTO文檔。然而,本教程是自包含的,你不須要檢查出的應用程序代碼,以便可以遵循它。
在開始以前本教程中,您將須要:
若是你尚未這樣作,須要幫助這樣作,你能夠按照咱們的入門指南。
當用戶使用Facebook賬號登陸到您的應用程序,你的應用程序將控制權交給了Facebook的iOS應用程序或Facebook在移動瀏覽器,它會顯示用戶一個對話框,提示他們受權您的應用程序。若是一切順利,這將致使建立將存儲在一個訪問令牌和緩存的會話。可是,當你試圖讓你的用戶登陸到你的應用程序,不管是與Facebook或其餘方式,它始終是很好的作法,避免沒必要要的步驟,以儘可能減小摩擦。因此,若是一我的曾登陸到Facebook上與你的應用程序,並仍然有從該會話的有效緩存的道理,咱們建議您使用它打開一個會話。這樣,你無需爲你的用戶在觸摸一個按鈕來登陸。
要實現這一點,在應用程序委託的應用:didFinishLaunchingWithOptions:
方法,咱們將添加如下內容:
/ /當一我的打開的應用程序,檢查是否有緩存的會話 ,若是 (FBSession 。activeSession 。狀態== FBSessionStateCreatedTokenLoaded ) { / /若是有一個,剛打開會話默默地,而不顯示用戶的登陸界面 [ FBSession openActiveSessionWithReadPermissions :@ [@ 「public_profile」 ] allowLoginUI :無 completionHandler :^(FBSession * 會話, FBSessionState 狀態, NSError * 錯誤) { / /處理程序的會話狀態改變 / /這個方法會被調用每次會話狀態的變化, / /也爲中間狀態,而不只僅是在會議開幕 [ 自我sessionStateChanged :會話狀態:狀態錯誤:錯誤] }];
咱們首先檢查是否有經過檢查活動會話的狀態的緩存令牌。若是有一個緩存的令牌的會話狀態將被FBSessionStateCreatedTokenLoaded
。若是是這樣的話,咱們能夠嘗試使用打開緩存的會話FBSession
openActiveSessionWithReadPermissions:allowLoginUI:completionHandler:
方法與allowLoginUI:
設置爲NO
(這將防止在登陸對話框中的顯示)。須要傳遞給此方法的其餘參數爲:
當有人使用Facebook登陸的應用程序的鏈接,應用程序能夠訪問他們保存在Facebook數據。這是經過要求作的權限。讀取數據須要要求的讀取權限。應用程序還須要以發佈內容的用戶的名義發佈權限。若是您想了解更多有關權限,你能夠看看咱們的權限一節。
這要求更多了應用程序public_profile
,電子郵件
和user_friends
將不得不經過Facebook的審查能夠提供給廣大市民才。請參閱咱們的評論文檔獲取更多信息。
該openActiveSessionWithReadPermissions:allowLoginUI:completionHandler:
接受一個將被調用,每當有一個會話狀態更改處理。這意味着,你的處理方法會被調用每個登陸過程當中的中間階段狀態的變化,不只在會話打開(或打開失敗)。同時也爲發生其餘全部會話狀態改變會話的整個生命週期中。若是您想了解更多關於FBSession
生命週期,您能夠參考咱們的理解會話嚮導。咱們將仔細看看這個在處理會話狀態的變化部分本教程。
到目前爲止,咱們已經討論瞭如何打開一個會話,若是有一個緩存的令牌。打開一個會話,而無需一個是很是類似的。在咱們的例子中,咱們有一個按鈕,用戶能夠觸摸切換認證。當用戶觸摸這個按鈕,應用程序將控制傳遞給Facebook的iOS應用或Facebook在移動瀏覽器,它會顯示用戶一個對話框,提示他們受權的應用程序,像這樣:
要實現這一點,咱們須要作三件事情:
要鏈接的按鈕,在按鈕的委託,咱們作到如下幾點:
- (IBAction )buttonTouched :(ID )發件人 { / /若是會話狀態是任意的兩個「開」狀態時,按鈕clicked if ( FBSession . activeSession . state == FBSessionStateOpen || FBSession . activeSession . state == FBSessionStateOpenTokenExtended ) { / /關閉會話並從緩存中移除的訪問令牌 / /會話狀態處理程序(在應用程序委託)將被自動調用 [ FBSession 。activeSession closeAndClearTokenInformation ]; / /若是會話狀態不是任意的兩個「開」狀態的按鈕被點擊時 } 不然 { / /打開一個會話顯示用戶的登陸界面 / /你必須始終打開一個會話時要求public_profile權限 [ FBSession openActiveSessionWithReadPermissions :@ [@ 「public_profile」 ] allowLoginUI :YES completionHandler : ^(FBSession * 會話, FBSessionState 狀態, NSError * 錯誤) { / /檢索應用程序委託 AppDelegate中* 的AppDelegate = [ 的UIApplication sharedApplication ]。表明; / /調用應用程序委託的sessionStateChanged:狀態:錯誤的方法來處理會話狀態的變化 [ AppDelegate中sessionStateChanged :會話狀態:狀態錯誤:錯誤] }]; } }
當用戶觸摸該按鈕時,若是當前會話是打開的,咱們將其關閉。另外,若是在當前會話中比開其餘任何國家,咱們將嘗試打開它。要檢查是否會話是開放的,咱們檢查會話狀態是任何兩個打開的狀態:FBSessionStateOpen
或FBSessionStateOpenTokenExtended
。若是是這樣的話,咱們經過調用關閉會話closeAndClearTokenInformation
上的活動會話。會議閉幕會自動調用會話狀態更改處理。若是會話沒有打開,咱們將嘗試經過調用打開它FBSession openActiveSessionWithReadPermissions:allowLoginUI:completionHandler:
方法與allowLoginUI:
設置爲YES
。一樣,咱們須要指定權限(至少public_profile
)和完成處理程序。對於完成處理程序,咱們使用的是咱們用於無聲登陸一樣的方法。
接着,以處理傳入的URL,當Facebook的應用程序或Facebook網站將控制返回給您的應用程序,重寫應用程序:的OpenURL:sourceApplication:標註
在你的應用程序委託來調用處理傳入的URL FBsession對象:
/ /在Facebook登陸流程,您的應用程序將控制權交給了Facebook的iOS應用程序或Facebook在移動瀏覽器 。/ /驗證後,您的應用程序將被召回的會話信息 - (BOOL )應用:(的UIApplication *)應用 的OpenURL :(NSURL *)網址 sourceApplication :(的NSString *)sourceApplication 註釋:(ID )註釋 { 返回 [ FBAppCall handleOpenURL :網址sourceApplication :sourceApplication ]; }
默認狀況下,FBAppCall
將完成流FBSession.activeSession
。若是你明確管理FBSession
狀況下,請使用以過載FBSession
實例。
最後,你將須要處理的狀況下,用戶離開正在顯示Facebook登陸對話框,而您的應用程序時。這可能發生,例如,若是使用壓iOS的「家」按鈕,對話框被激活。爲了處理這種狀況,覆蓋applicationDidBecomeActive:
方法在你的應用程序委託調用FBAppCall handleDidBecomeActive
。該方法將檢查可能已離開掛任何會議開幕進程,而且將清除懸而未決的會話,這樣就能夠從新開始。
- (無效)applicationDidBecomeActive :(的UIApplication *)應用 { / /處理用戶離開應用程序正在顯示Facebook登陸對話框時 / /例如:當用戶按下了iOS的「家」按鈕,登陸對話框被激活 [ FBAppCall handleDidBecomeActive ]; }
在接下來的會議上,咱們將看到如何處理會話狀態的變化。
在以前的會議上,當咱們打開一個會話,咱們必須提供一個將被調用,每當有一個會話狀態更改處理。這種處理方法會被調用每個登陸過程當中的中間階段狀態的變化,不只在會話打開(或打開失敗)。同時也爲發生其餘全部會話狀態改變會話的整個生命週期中。若是您想了解更多關於FBSession
生命週期,您能夠參考咱們的理解會話部分。
這裏是處理程序,與不一樣的可能狀態的變化和錯誤處理的例子:
/ /此方法將處理應用程序的全部會話狀態的變化 - (無效)sessionStateChanged :(FBSession *)會話狀態:(FBSessionState )狀態錯誤:(NSError *)錯誤 { / /若是session被成功打開 ,若是 (!錯誤&& 狀態== FBSessionStateOpen ){ 的NSLog (@ 「會話打開」 ); / /顯示用戶已登陸 若是會話被關閉 的NSLog (@ 「關閉會話」 ); / /顯示用戶已登陸了的用戶界面 [ 自我userLoggedOut ]; } / /處理錯誤 ,若是 (錯誤){ 的NSLog (@ 「錯誤」 ); 的NSString * alertText ; 的NSString * alertTitle ; / /若是錯誤要求人們使用的應用程序,使應用程序以外的行動,以恢復 若是 ([ FBErrorUtility shouldNotifyUserForError :錯誤] == YES ){ alertTitle = @ 「出事了」 ; alertText = [ FBErrorUtility userMessageForError :錯誤] [ 自我showMessage :alertText withTitle :alertTitle ]; } 不然 { / /若是用戶註銷登陸,什麼都不作 ,若是 ([ FBErrorUtility errorCategoryForError :錯誤] == FBErrorCategoryUserCancelled ) { 的NSLog (@ 「用戶註銷登陸」 ); 這種狀況發生的外/ /處理會話關閉 錯誤「 ; alertText = @ 「你的當前會話再也不有效。請從新登陸「。; [ 自showMessage :alertText withTitle :alertTitle ]; / /在這裏,咱們將處理與通常錯誤消息的全部其餘錯誤。 / /咱們建議您查看咱們的處理錯誤引導有關詳細信息, / / https://developers.facebook.com/docs/ios/errors/ } 不然 { / /從錯誤中獲取更多的錯誤信息 的NSDictionary * errorInformation = [[[ 錯誤。USERINFO objectForKey :@ 「com.facebook.sdk:ParsedJSONResponseKey」 ]