У меня проблемы с реализацией SDK Facebook в проекте iOS, и я подозреваю, что виновата эта строка:
[facebook authorize:permissions delegate:self];
Когда я пытаюсь запустить его в своем проекте ARC, он не позволитделегат: самому остаться.Вместо этого он говорит, что есть «Ошибка ARC: нет видимого @interface для« Facebook »объявляет селектор» authorize: Delegate: '"
Я могу скомпилировать с этим:
[facebook authorize:permissions];
, ноЯ не думаю, что Facebook и приложение общаются должным образом.Я могу войти в систему, но после перенаправления обратно в мое приложение не регистрирует, что оно вошло в систему, и не может выполнить ни одну из своих функций совместного использования.
Я думаю, что мне нужно поддерживать эту страницу какARC включен, поэтому установка флага -fno-objc-arc не разрешит эту проблему.
Есть мысли?
СЛЕДУЕТ ЗА 4/5/12:
Мне удалось успешно реализовать Facebook ... но с помощью всплывающего метода входа в приложение.Вот как я это сделал (только аспекты FB):
Мой заголовок делегата приложения:
#import "FBConnect.h"
@interface AppDelegate : UIResponder <UIApplicationDelegate>{
Facebook *facebook;
}
@property (nonatomic, strong) Facebook *facebook;
@end
Включен метод делегата приложения:
////FB ELEMENT: IMPORTING VC TO CONNECT WITH FACEBOOK
#import "ViewController.h"
////FB ELEMENT
@synthesize facebook;
///////FB ELEMENTS
// THIS METHOD SUPPORTS IOS PRE 4.2
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url{
NSLog(@"handleOpenURL called.");
return [facebook handleOpenURL:url];
}
// THIS METHOD SUPPORTS IOS AFTER 4.2
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation{
NSLog(@"openURL called.");
return [facebook handleOpenURL:url];
}
Тогда яхотел, чтобы большая часть активности Facebook была на странице, которая его назвала.Вот заголовок:
#import "FBConnect.h"
@interface ViewController : UIViewController <FBSessionDelegate, FBDialogDelegate>
//FB ELEMENTS
Facebook *facebook;
BOOL login;
//////SHARE PROPERTIES FOR PHOTO DISPLAY LAYER
@property (nonatomic, strong) Facebook *facebook;
И на методе контроллера представления:
@synthesize facebook;
////////////////////////////////////////////
-(void)postWall{
NSLog(@"postWall called.");
//CREATING MORE ACCESSIBLE VARIABLE
NSString *photoTitle = [photoTitles objectAtIndex:pt];
//ESTABLISHES DESCRIPTION CONTENT
NSDictionary *itemDescriptionPre = [photoDescriptions objectAtIndex:pt];
NSString *itemDescription = [itemDescriptionPre objectForKey:@"_content"];
NSMutableDictionary *paramsSet =
[NSMutableDictionary dictionaryWithObjectsAndKeys:
//CLICKABLE LINK COMPONENT (STORY TITLE WORKS WELL HERE)
photoTitle, @"name",
//STORY DESCRIPTION GOES HERE
itemDescription, @"description",
//STORY LINK GOES HERE
[flickrURLLink objectAtIndex:pt], @"link",
//PHOTO TO CONNECT WITH POST
[photoURLsLargeImage objectAtIndex:pt], @"picture",
nil];
[[self facebook] dialog:@"feed" andParams:paramsSet andDelegate:self];
}
- (void) fbDidLogin {
facebook = [[Facebook alloc] initWithAppId:@"MY_APP_ID" andDelegate:self];
login = YES;
NSLog(@"Logged in with Facebook credentials");
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:[facebook accessToken] forKey:@"FBAccessTokenKey"];
[defaults setObject:[facebook expirationDate] forKey:@"FBExpirationKey"];
[defaults synchronize];
[self postWall];
}
- (void)fbDidNotLogin:(BOOL)cancelled{
///TO COMPLETE
}
- (void)fbDidExtendToken:(NSString*)accessToken
expiresAt:(NSDate*)expiresAt{
////TO COMPLETE
}
- (void)fbDidLogout{
login = NO;
NSLog(@"Logged out with Facebook credentials");
}
- (void)fbSessionInvalidated{
login = NO;
NSLog(@"Logged out with Facebook credentials");
}
После настройки я убедился, что добавил идентификатор приложения в список, как описано вУчебник Facebook и все работало как положено.
Я знаю, что значение входа в систему BOOL еще ни на что не влияет.
Моя текущая проблема с этим кодом - проблема совместимости до 5.1.
Отлично работает в моем тестовом устройстве и симуляторе 5.1, но ничего не делает после шага входа, если я перехожу на 5.0 или ниже.Есть идеи, почему это так?Я могу ввести свои данные для входа в систему, затем вернуться в приложение, но больше вариантов не отображается.
Спасибо за ваши отзывы.Хотелось бы услышать ваши мысли об этом предмете.