Интеграция iOS с Facebook - отправка и получение запросов
Я использую API Facebook, чтобы подключиться к Facebook и отправить запрос через родные диалоговые окна, предоставляемые API.
Я следовал примеру, опубликованному в документации на developers.facebook.com Но у меня возникла следующая проблема с отправкой запросов: 1. Запросы не отображаются в уведомлениях - только в центре приложений - В этом случае я думаю, что это проблема того, что приложение находится в песочнице и не размещено в APPSTORE
- Я успешно отправил запрос на сервер Facebook с правильным идентификатором fbUser. Но когда я хочу получить уведомление в приложении, возникает проблема:
Следуя документации в качестве авторизованного пользователя, я должен увидеть это в методе open url:
fb[APP_ID]://authorize#expires_in=[ACCESS_TOKEN_EXPIRATION]
&access_token=[USER_ACCESS_TOKEN]
&target_url=https://apps.facebook.com/[APP_NAME_SPACE]/?request_ids=
[COMMA_SEPARATED_REQUESTIDs]&ref=notif&app_request_type=user_to_user
Но я вижу только простой логин без URL-адреса targer.... Я вижу дату истечения сеанса, идентификатор приложения fb, токен доступа и так далее. Но нет целевого URL?
Так что же такое target_url? Как это должно быть установлено? Что я должен включить при отправке запроса?
Кроме того: метод open url дескриптора приложения вызывается правильно. Метод checkRequests также вызывается правильно после того, как приложение становится активным.
Пожалуйста, не связывайте меня с документами. Я прочитал это более 50 раз и не нашел разумного решения...
- (BOOL)application:(UIApplication *)application
openURL:(NSURL *)url
sourceApplication:(NSString *)sourceApplication
annotation:(id)annotation {
// attempt to extract a token from the url
self.openedURL = url;
NSLog(@"%@",url);
return [FBSession.activeSession handleOpenURL:url];
}
- (void)sendRequest {
FBSBJSON *jsonWriter = [FBSBJSON new];
NSDictionary *gift = [NSDictionary dictionaryWithObjectsAndKeys:
@"5", @"points",
@"1", @"badge",
nil];
NSString *giftStr = [jsonWriter stringWithObject:gift];
NSMutableDictionary* params =
[NSMutableDictionary dictionaryWithObjectsAndKeys:
@"Hi from test app", @"message",
giftStr, @"data",
nil];
[self.facebook dialog:@"apprequests"
andParams:params
andDelegate:self];
}
// Handle the request call back
- (void)dialogCompleteWithUrl:(NSURL *)url {
NSDictionary *params = [self parseURLParams:[url query]];
NSString *requestID = [params valueForKey:@"request"];
NSLog(@"Request ID: %@", requestID);
}
-(FBSession*)returnSession{
return self.session;
}
/*
* Helper function to get the request data
*/
- (void) notificationGet:(NSString *)requestid {
[FBRequestConnection startWithGraphPath:requestid
completionHandler:^(FBRequestConnection *connection,
id result,
NSError *error) {
if (!error) {
NSString *title;
NSString *message;
if ([result objectForKey:@"data"]) {
title = [NSString
stringWithFormat:@"%@ sent you a gift",
[[result objectForKey:@"from"]
objectForKey:@"name"]];
FBSBJSON *jsonParser = [FBSBJSON new];
NSDictionary *requestData =
[jsonParser
objectWithString:[result objectForKey:@"data"]];
message =
[NSString stringWithFormat:@"Badge: %@, Karma: %@",
[requestData objectForKey:@"badge"],
[requestData objectForKey:@"points"]];
} else {
title = [NSString
stringWithFormat:@"%@ sent you a request",
[[result objectForKey:@"from"] objectForKey:@"name"]];
message = [NSString stringWithString:
[result objectForKey:@"message"]];
}
UIAlertView *alert = [[UIAlertView alloc]
initWithTitle:title
message:message
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil,
nil];
[alert show];
// Delete the request notification
[self notificationClear:[result objectForKey:@"id"]];
}
}];
}
/*
* Helper function to check incoming URL
*/
- (void) checkIncomingNotification {
if (self.openedURL) {
NSString *query = [self.openedURL fragment];
if (!query) {
query = [self.openedURL query];
}
NSDictionary *params = [self parseURLParams:query];
for (NSString * str in [params allKeys]) {
NSLog(@"key %@", str);
}
// Check target URL exists
NSString *targetURLString = [params valueForKey:@"target_url"];
if (targetURLString) {
NSURL *targetURL = [NSURL URLWithString:targetURLString];
NSDictionary *targetParams = [self parseURLParams:[targetURL query]];
NSString *ref = [targetParams valueForKey:@"ref"];
// Check for the ref parameter to check if this is one of
// our incoming news feed link, otherwise it can be an
// an attribution link
if ([ref isEqualToString:@"notif"]) {
// Get the request id
NSString *requestIDParam = [targetParams
objectForKey:@"request_ids"];
NSArray *requestIDs = [requestIDParam
componentsSeparatedByString:@","];
// Get the request data from a Graph API call to the
// request id endpoint
[self notificationGet:[requestIDs objectAtIndex:0]];
}
}
// Clean out to avoid duplicate calls
self.openedURL = nil;
}
}
Есть ли причина, по которой эти проблемы вызваны тем, что приложение не публикуется в Appstore (идентификатор Appstore не установлен ни для iPhone, ни для iPad)?
Вот фрагменты кода, показывающие использование API fb:
Большое спасибо за время.
2 ответа
Facebook SDK 3,5 запросов не работает
Я думаю, что эта ссылка поможет вам, настроить приложение на Facebook, а также