6

我的 iOS 应用程序使用 Facebook 登录,但是我的开发团队最近决定将我们所有的应用程序整合到一个具有通用 APP ID 的通用 Facebook 应用程序中。所以我进入我的项目并尝试将我的 FacebookAppID 和 URL 类型更改为正确的 APP ID,但是当我运行应用程序并单击登录按钮时,它会将我重定向到登录 Facebook 上的旧应用程序。我完全不知道为什么会这样,但这是我的 AppDelegate 文件中的内容:

/*
 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 {
    NSArray *permissions = [[NSArray alloc] initWithObjects:
                        @"email",
                        @"user_games_activity",
                        @"user_location",
                        @"user_likes",
                        @"user_birthday",
                        nil];
return [FBSession openActiveSessionWithReadPermissions:permissions
                                          allowLoginUI:allowLoginUI
                                     completionHandler:^(FBSession *session,
                                                         FBSessionState state,
                                                         NSError *error) {
                                         [self sessionStateChanged:session
                                                             state:state
                                                             error:error];
                                     }];
}

/*
 * If we have a valid session at the time of openURL call, we handle
 * Facebook transitions by passing the url argument to handleOpenURL
 */
- (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];
}
/*
 *Logout
 *
 */
- (void) closeSession {
    [FBSession.activeSession closeAndClearTokenInformation];
}
4

2 回答 2

8

您的设备上可能有两个应用程序在应用程序 Info.plist 中具有相同的 Facebook URL 方案。您可以:

  • 删除旧应用程序,或
  • 重新安装旧应用,但事先从 Info.plist 文件中删除 Facebook URL 方案

您可能有多个 URL 方案。如果是这样,您应该寻找看起来像 fbxxxxxxxxxxx 的那个,它显示在http://developers.facebook.com/上的应用页面上

于 2013-03-13T22:17:01.910 回答
0

我们仍然可以使用 UrlSchemeSuffix 在不同的应用程序中使用相同的 facebook url 方案。为此我们可以设置脸书开发者控制台

然后在 Info.plist 文件中:

<key>FacebookUrlSchemeSuffix</key>
<string>$(FACEBOOK_URL_ENV)</string>
<key>CFBundleURLTypes</key>
<array>
        <dict>
            <key>CFBundleTypeRole</key>
            <string>Editor</string>
            <key>CFBundleURLName</key>
            <string>FACEBOOK_URL_SCHEME</string>
            <key>CFBundleURLSchemes</key>
            <array>
                <string>$(FACEBOOK_URL_SCHEME)</string>
            </array>
        </dict>
</array>

设置您的自定义变量 XCode:构建设置 > 用户定义(添加新的用户定义设置)

(在 fbXXXXXXXXXXXXsuffixValue 之后替换您的 Facebook 应用程序 ID)

在此处输入图像描述

于 2020-09-02T15:35:38.950 回答