アプリケーションでFacebook SDKを使用しようとしています。私のアプリケーションは、Salesforce SDK を使用して Salesforce にログインし、ユーザーは Facebook を使用してアプリケーションにログインできます。
From Salesforce は、ユーザーが Facebook でログインするときに Facebook アクセス トークンを取得できます。このアクセス トークンを使用して、オブジェクトFBSessionとのセッションを開きます。
これは、セッションを開くために使用しているコードです。
NSArray *newPermission = [NSArray arrayWithObjects:@"user_friends",@"email", nil];
NSMutableDictionary *tokenInformationDictionary = [NSMutableDictionary new];
tokenInformationDictionary[@"com.facebook.sdk:TokenInformationExpirationDateKey"] = [NSDate dateWithTimeIntervalSinceNow: 3600];;
tokenInformationDictionary[@"com.facebook.sdk:TokenInformationRefreshDateKey"] = [NSDate date];
tokenInformationDictionary[@"com.facebook.sdk:TokenInformationTokenKey"] = fbAccessToken;
tokenInformationDictionary[@"com.facebook.sdk:TokenInformationPermissionsKey"] = newPermission;
tokenInformationDictionary[@"com.facebook.sdk:TokenInformationLoginTypeLoginKey"] = @0;
FBAccessTokenData *accesToken = [FBAccessTokenData createTokenFromDictionary: tokenInformationDictionary];
[[FBSession activeSession] openFromAccessTokenData:accesToken completionHandler:^(FBSession *session, FBSessionState status, NSError *error) {
}];
リンクを公開して友達リストを取得しようとしています。
公開するには、次のコードを使用します。
NSDictionary *params = @{
@"name" : [NSString stringWithFormat:NSLocalizedString(@"FBNameFormat", nil), [dicRecord objectForKey:@"Name"], [[dicRecord objectForKey:@"Store__r"] objectForKey:@"Name"]],
@"caption" : [NSString stringWithFormat:NSLocalizedString(@"FBCaptionFormat", nil), [dicRecord objectForKey:@"Name"], [[dicRecord objectForKey:@"Store__r"] objectForKey:@"Name"]],
@"description" : NSLocalizedString(@"FBDescription", nil), //@"Welcome to iOS world",
@"picture" : [dicRecord objectForKey:@"Image__c"],
@"link" : [NSString stringWithFormat:NSLocalizedString(@"FBDishUrl", nil), [dicRecord objectForKey:@"Id"]]//a00w000000V0TK9",
};
// Invoke the dialog
[FBWebDialogs presentFeedDialogModallyWithSession:nil parameters:params handler:^(FBWebDialogResult result, NSURL *resultURL, NSError *error) {
if (error) {
NSLog(@"Error publishing story.");
//[self.indicator stopAnimating];
} else if (result == FBWebDialogResultDialogCompleted){
if ([isSuggested isEqual:[NSNumber numberWithInt:-1]]){
NSMutableDictionary *diccionario = [[NSMutableDictionary alloc] init];
}
}
}];
1)これは、アプリを閉じて再度開いた場合にのみ機能します
[FBSession.activeSession closeAndClearTokenInformation];
openFromAccessTokenData の completionHandlerで。
アプリを閉じて再度開くことなく、これを機能させる方法はありますか?
2) このコードを使用してフレンド リストを取得しようとすると、次のようになります。
FBRequest *reqMyFriends = [FBRequest requestForMyFriends];
reqMyFriends.session = FBSession.activeSession;
[reqMyFriends startWithCompletionHandler:^(FBRequestConnection *connection, NSDictionary* result,NSError *error) {
if (!error){
NSArray* friends = [result objectForKey:@"data"];
}
}];
次のエラーが表示されます。
error =
{
code = 190;
"error_subcode" = 460;
message = "Error validating access token: Session does not match current stored session. This may be because the user changed the password since the time the session was created or Facebook has changed the session for security reasons.";
type = OAuthException;
};
code = 400;
なぜこのエラーが発生するのですか?