#iphone #facebook-graph-api
#iPhone #facebook-graph-api
Вопрос:
Я использую Facebook Graph API, подобный этому примерному API
Он проверяет, действительно ли появились учетные данные для входа в View, и вызывает все методы в одном представлении. Я хочу использовать эти методы в других представлениях, но как передать токен доступа в другие представления (поддерживает сеанс входа в систему). Вот код для входа в систему
- (void)viewDidAppear:(BOOL)animated {
//Facebook Application ID
NSString *client_id = @"142759389130183";
//alloc and initalize our FbGraph instance
self.fbGraph = [[FbGraph alloc] initWithFbClientID:client_id];
//begin the authentication process.....
//[fbGraph authenticateUserWithCallbackObject:self andSelector:@selector(fbGraphCallback:)
// andExtendedPermissions:@"user_photos,user_videos,publish_stream,offline_access,user_checkins,friends_checkins"];
[fbGraph authenticateUserWithCallbackObject:self andSelector:@selector(fbGraphCallback:) andExtendedPermissions:@"user_photos,user_videos,publish_stream,offline_access" andSuperView:self.view];
}
- (void)fbGraphCallback:(id)sender {
if ( (fbGraph.accessToken == nil) || ([fbGraph.accessToken length] == 0) ) {
NSLog(@"You pressed the 'cancel' or 'Dont Allow' button, you are NOT logged into Facebook...I require you to be logged in amp; approve access before you can do anything useful....");
//restart the authentication process.....
// [fbGraph authenticateUserWithCallbackObject:self andSelector:@selector(fbGraphCallback:)
// andExtendedPermissions:@"user_photos,user_videos,publish_stream,offline_access,user_checkins,friends_checkins"];
// StartPage *startPage = [[StartPage alloc]initWithNibName:@"StartPage" bundle:nil];
//[self.navigationController pushViewController:startPage animated:YES];
//[startPage release];
[self dismissModalViewControllerAnimated:YES];
} else {
//pop a message letting them know most of the info will be dumped in the log
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Welcome" message:@"You are logged into facebook" delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil];
[alert show];
[alert release];
NSLog(@"------------>CONGRATULATIONS<------------, You're logged into Facebook... Your oAuth token is: %@", fbGraph.accessToken);
}
}
Комментарии:
1. Пожалуйста, четко объясните вашу проблему..
2. вызовите этот метод из других представлений .. вы всегда можете это сделать 🙂
3. Я хочу создать другой вид для дома, профиля, загрузки фотографий, и когда я войду в систему, затем перейду к другому виду, я хочу опубликовать фотографию в альбоме зарегистрированного пользователя. как я мог узнать о вошедшем в систему пользователе, все эти методы работают в одном представлении.
4. @zoozoo Вызывается только метод выхода из другого представления .. метод getmefeedbuttonpressed возвращает нулевое значение
5. нет, он не может вернуть null…do одна вещь… получите все значения, которые вы хотите отобразить в одном массиве в представлении 1, и покажите этот массив в tableview другого представления.
Ответ №1:
-(IBAction)postMeFeedButtonPressed:(id)sender {
postFeedCustom *detailViewController = [[postFeedCustom alloc] initWithNibName:@"postFeedCustom" bundle:nil];
[self.navigationController pushViewController:detailViewController animated:YES];
[detailViewController release];
}
-(void)postMeFeedCustomized{
NSMutableDictionary *variables = [NSMutableDictionary dictionaryWithCapacity:4];
[variables setObject:postString forKey:@"message"];
//[variables setObject:@"http://bit.ly/bFTnqd" forKey:@"link"];
//[variables setObject:@"This is the bolded copy next to the image" forKey:@"name"];
//[variables setObject:@"This is the plain text copy next to the image. All work and no play makes Jack a dull boy." forKey:@"description"];
FbGraphResponse *fb_graph_response = [fbGraph doGraphPost:@"me/feed" withPostVars:variables];
NSLog(@"postMeFeedButtonPressed: %@", fb_graph_response.htmlResponse);
//parse our json
SBJSON *parser = [[SBJSON alloc] init];
NSDictionary *facebook_response = [parser objectWithString:fb_graph_response.htmlResponse error:nil];
[parser release];
//let's save the 'id' Facebook gives us so we can delete it if the user presses the 'delete /me/feed button'
self.feedPostId = (NSString *)[facebook_response objectForKey:@"id"];
NSLog(@"feedPostId, %@", feedPostId);
NSLog(@"Now log into Facebook and look at your profile...");
}
в другом классе, где вы хотите, чтобы пользователь опубликовал свое пользовательское сообщение… вы можете сделать вот так..
-(void) viewDidLoad{
[super viewDidLoad];
appDelegate=(oAuth2TestAppDelegate*)[[UIApplication sharedApplication]delegate];
}
-(IBAction)FeedPost:(id)sender{
postString=postField.text;
[appDelegate.viewController postMeFeedCustomized];
postField.text=@"";
[postField resignFirstResponder];
}
вы видели это?? в этом методе для кнопки я вызвал postfeedcustomized
метод, и я сохраняю параметр текстового поля в postString
, и это тот postStirng, который я публикую в postfeedcustomized
методе. смотрите эту инструкцию [variables setObject:postString forKey:@"message"];
здесь строка post — это строка …который находится в ViewController 2 … он передает сообщение, введенное пользователем .. теперь это код для публикации сообщения из другого представления…при нажатии кнопки для публикации ленты она перейдет на другой контроллер просмотра, где находится текстовое поле .. там пользователь вводит свое сообщение…и после того, как он вводит сообщение, метод postfeedcustomized
вызывается из этого ViewController..Я сделал это только для статуса … измените его в соответствии с вашими потребностями и опубликуйте картинку с другого просмотра..
Комментарии:
1. Хорошо, я попробую это. Вы имеете в виду, что метод Postmefeedcustomize должен быть написан в другом представлении, откуда я должен отправить сообщение?
2. нет, он относится к тому же классу, но он должен вызываться из другого viewcontroller. когда вы нажимаете кнопку или что-то, что вы хотите do…in другой класс
3. да, скажите мне, что произошло?? ты это сделал??
4. да. Я могу вызвать это из другого представления. Но как я мог передать параметры, означает, что я хочу сделать это динамичным. предположим, мне нужно отправить сообщение из текстового поля, тогда как передать это в методе. должен ли я создать новый метод с параметром
5. хорошо … вы предполагаете создать новое представление с параметром, а затем вам нужно вызвать пользовательский post feed из этого класса… подождите, я редактирую ответ через некоторое время..
Ответ №2:
Я тоже использую Facebook API. В моем коде у меня есть Facebook-блоггер, который является синглтоном с объектом Facebook.
Для сохранения сеанса я использую NSUserDefaults (найти документы здесь).
[[NSUserDefaults standardUserDefaults] setObject:m_Facebook.accessToken forKey:@"AccessToken"];
[[NSUserDefaults standardUserDefaults] setObject:m_Facebook.expirationDate forKey:@"ExpirationDate"];
[[NSUserDefaults standardUserDefaults] synchronize];
Где m_Facebook — это мой объект Facebook в моем синглтоне.
После этого я могу перехватить доступ с :
m_Facebook.accessToken = [[NSUserDefaults standardUserDefaults] stringForKey:@"AccessToken"];
m_Facebook.expirationDate = (NSDate *) [[NSUserDefaults standardUserDefaults] objectForKey:@"ExpirationDate"];
Комментарии:
1. Как передать этот токен доступа и дату истечения срока действия для входа в систему в iOS?