Facebook経由でログインする機能を提供するiOSアプリを開発しています。このために、私は Facebook フレームワークを使用しています。私は developers.facebook.com を調べて、そこで説明されているようにログイン機能を実装しました。FBログインは正常に動作しています。FB ログイン機能は次のように機能します。
FB フレームワークは FB アプリを見つけようとします。存在する場合は、FB アプリの資格情報を使用して認証します。
FB アプリが存在しない場合は、iPhone デバイス設定の FB 資格情報を使用して認証を試みます。
FB システム アカウントが存在しない場合は、認証のためにサファリが開きます。
3 番目のステップで、Safari の代わりに Facebook Web ビューがポップアップ表示されるようにしたいと考えています。以下は、私が使用している私のコードです。
#import "AppDelegate.h"
NSString *const FBSessionStateChangedNotification =
@"com.sampleapp.facebook:FBSessionStateChangedNotification";
@implementation AppDelegate
@synthesize
loggedInUserID = _loggedInUserID, loggedInSession = _loggedInSession;
static NSString* kAppId = **FBAPPID**;
-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.loginViewControlObj = [[LoginViewController alloc] init];
UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:self.loginViewControlObj];
self.navigationController = nav;
self.navigationController.navigationBarHidden = YES;
self.window.rootViewController = self.navigationController;
[self.window makeKeyAndVisible];
return YES;
}
- (void)applicationWillResignActive:(UIApplication *)application
{
}
- (void)applicationDidEnterBackground:(UIApplication *)application
{
// Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.
// If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
}
- (void)applicationWillEnterForeground:(UIApplication *)application
{
// Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background
}
- (void)applicationDidBecomeActive:(UIApplication *)application
{
[FBAppCall handleDidBecomeActive];
}
- (void)applicationWillTerminate:(UIApplication *)application
{
[FBSession.activeSession close];
// Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
}
- (BOOL)application:(UIApplication *)application
openURL:(NSURL *)url
sourceApplication:(NSString *)sourceApplication
annotation:(id)annotation {
return [FBAppCall handleOpenURL:url sourceApplication:sourceApplication];
}
#pragma mark - FB Methods
/*
* 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");
[FBRequestConnection
startForMeWithCompletionHandler:^(FBRequestConnection *connection,
NSDictionary<FBGraphUser> *user,
NSError *error) {
if (!error) {
self.loggedInUserID = user.id;
self.loggedInSession = FBSession.activeSession;
}
}];
}
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.
*/
- (void)openSessionWithAllowLoginUI:(BOOL)allowLoginUI {
// Initialize a session object
FBSession *session = [[FBSession alloc] initWithPermissions:[NSArray arrayWithObjects:@"basic_info", @"email", @"publish_stream", @"publish_actions", @"read_friendlists", nil]];
// Set the active session
[FBSession setActiveSession:session];
// Open the session
[session openWithBehavior:FBSessionLoginBehaviorWithFallbackToWebView
completionHandler:^(FBSession *session,
FBSessionState status,
NSError *error) {
[self sessionStateChanged:session
state:status
error:error];
}];
}
/*
*
*/
- (void) closeSession {
[FBSession.activeSession closeAndClearTokenInformation];
}
@end
別のコントローラーからログインを呼び出しています。デバイスに FB アプリとシステム アカウントがない場合、Web ビューではなくサファリが開きます。
可能であれば、これを解決するのを手伝ってください。