Поток ссылок истории с использованием единого входа в Facebook - openURL не вызывается - PullRequest
3 голосов
/ 24 марта 2012

Я успешно реализовал единый вход в приложение iOS 4.3. Теперь я хочу опубликовать ссылку на стене пользователя на Facebook, чтобы, когда его друзья, владеющие приложением, щелкают ссылку, они перенаправляются в мое приложение. Я интерпретирую http://developers.facebook.com/docs/mobile/ios/build/#deeplink, как одна из функций делегата

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url, (pre iOS 4.2)
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url
 sourceApplication:(NSString *)sourceApplication annotation:(id)annotation , (iOS 4.2+)
Будет вызвано

, и общая ссылка может быть проанализирована с помощью клавиши [target_link]. Однако я не могу заставить это работать. Я успешно разместил ссылку на новостную ленту пользователей, используя:

   NSDictionary* params=[[NSDictionary alloc] initWithObjectsAndKeys:myFacebookAppID,@"app_id",
 linkToPost,@"link",nil];
 [_facebook dialog:@"feed" andParams:params andDelegate:self]

Сообщение появляется в моей ленте новостей, но когда я нажимаю на ссылку, ни один из методов делегата, упомянутых выше, не вызывается. Если я сделаю что-то особенное со ссылкой, я попробую добавить "fb: myFacebookAppID: //" перед ссылкой, но это не работает вообще. Я что-то не так понял?

Мое приложение еще не работает в AppStore, и на сайте developers.facebook.com есть поле, в котором меня просят ввести идентификатор AppStore. Может ли это быть проблемой? Если так, есть ли обходной путь? Я хочу проверить, что это работает как следует, прежде чем отправлять мое приложение в AppStore.

Спасибо за вашу помощь!

1 Ответ

4 голосов
/ 25 марта 2012

Вам нужно, чтобы ваш аккаунт на Facebook был в AppDelegate, например:

@interface FacebookAppDelegate : UIResponder <UIApplicationDelegate>

@property (strong, nonatomic) UIWindow *window;

@property (strong, nonatomic) UINavigationController *navigationController; 
@property (nonatomic, strong) Facebook *facebook;

@end

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary     *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    // Override point for customization after application launch.
    self.viewController = [[FacebookViewController alloc] initWithNibName:@"FacebookViewController" bundle:nil];

    self.facebook = [[Facebook alloc] initWithAppId:kAppId andDelegate:(id)self.viewController];

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    if ([defaults objectForKey:@"FBAccessTokenKey"] && [defaults objectForKey:@"FBExpirationDateKey"]) {
        self.facebook.accessToken = [defaults objectForKey:@"FBAccessTokenKey"];
        self.facebook.expirationDate = [defaults objectForKey:@"FBExpirationDateKey"];
    }

    self.window.rootViewController = self.viewController;
    [self.window makeKeyAndVisible];
    return YES;
}

А внутри AppDelegate вы должны реализовать:

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {
    return [self.facebook handleOpenURL:url];
}

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
    return [self.facebook handleOpenURL:url];
}

И если вы хотите реализовать протокол в своем классе, вы должны позвонить в Facebook по этому поводу:

FacebookAppDelegate *fbAppDelegate = (FacebookAppDelegate *)[[UIApplication sharedApplication] delegate]; 
NSArray *permissions = [[NSArray alloc] initWithObjects:@"publish_stream",@"create_event",@"offline_access", nil];

[[fbAppDelegate facebook] authorize:permissions];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...