Facebook に投稿するためにこのアプリケーションを使用していますが、現在、一部の iOS 6.0 デバイスに投稿する際に問題に直面しています。Facebook SDK 3.1 のみを使用し、アクションを公開しようとしています。以下は、読み取り許可を開始するためにクラスで使用しているコードです。
アクセスには、次のコードを使用しています。
// CALLING THIS CODE BLOCK IN ONE BUTTON ACTION.
if (FBSession.activeSession.isOpen)
{
[self pickaChoice];
}
else
{
[FBSession openActiveSessionWithPublishPermissions:[NSArray arrayWithObjects:@"publish_actions", nil]
defaultAudience:FBSessionDefaultAudienceEveryone
allowLoginUI:YES
completionHandler:
^(FBSession *session,
FBSessionState state, NSError *error) {
[self sessionStateChanged:session state:state error:error];
}];
}
- (void)sessionStateChanged:(FBSession *)session
state:(FBSessionState) state
error:(NSError *)error
{
switch (state)
{
case FBSessionStateOpen:
[FBSession setActiveSession:session];
[self pickaChoice];
break;
case FBSessionStateClosed:
case FBSessionStateClosedLoginFailed:
// Once the user has logged in, we want them to
// ...
[FBSession.activeSession closeAndClearTokenInformation];
break;
default:
break;
}
if (error) {
NSString* message = [NSString stringWithFormat:@"You have disallowed application to post on your behalf."];
UIAlertView *alertView = [[UIAlertView alloc]
initWithTitle:@"Error"
message:message
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[alertView show];
[FBSession.activeSession closeAndClearTokenInformation];
}
}
-(void)pickaChoice
{
/* Just a class to select message and then retrieve the message in the next function
-(void)didSelectaPhraseToPost:(NSString *)message */
FBPublishViewController *fbPublishViewController = [[FBPublishViewController alloc] initWithNibName:@"FBPublishViewController"
bundle:[NSBundle mainBundle]];
fbPublishViewController.selectionDelegate = self;
[self presentViewController:fbPublishViewController
animated:YES
completion:^(){
//nil
}];
}
-(void)didSelectaPhraseToPost:(NSString *)message
{
// Selecting a message from a class and retrieving here. This is the message to post on the feed.
[self publishMessage:message];
}
- (void) performPublishAction:(void (^)(void)) action
{
if ([FBSession.activeSession.permissions indexOfObject:@"publish_actions"] == NSNotFound) {
[FBSession.activeSession reauthorizeWithPublishPermissions:[NSArray arrayWithObject:@"publish_actions"]
defaultAudience:FBSessionDefaultAudienceFriends
completionHandler:^(FBSession *session, NSError *error) {
if (!error) {
action();
}
//For this example, ignore errors (such as if user cancels).
}];
} else {
action();
}
}
- (void)publishMessage:(NSString *)message
{
NSMutableDictionary *params = [NSMutableDictionary dictionaryWithObjectsAndKeys:
@"APP_NAME", @"name",
message, @"message",
APP_LINK, @"link",
@"APP_PICTURE", @"picture",
nil];
[self.spinner startAnimating];
[self performPublishAction:^{
[FBRequestConnection
startWithGraphPath:@"me/feed"
parameters:params
HTTPMethod:@"POST"
completionHandler:^(FBRequestConnection *connection,
id result,
NSError *error) {
[self.spinner stopAnimating];
NSString *messageTitle = nil;
NSString *message = nil;
// If the result came back okay with no errors...
if (result && !error)
{
NSLog(@"accessToken : %@",[FBSession activeSession].accessToken );
NSLog(@"result : %@",result);
messageTitle = @"Success";
message = @"App has posted to facebook";
}else{
NSLog(@"error : %@",error);
messageTitle = @"Error v1.1";
//message = error.localizedDescription;
message = @"Unable to process the request. Please check the permissions for the application.";
[FBSession.activeSession closeAndClearTokenInformation];
}
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:messageTitle
message:message
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles: nil];
[alert show];
//TODO maybe clear connection here if we want to force an new login
}];
}];
}
問題は、一部の iOS 6.0 デバイスで facebook.sdk.error 3 がスローされ、一部のデバイスでは、アプリケーションが投稿を許可されている場合でも facebook.sdk.error 2 がスローされます。現在のコードでは、よりユーザーフレンドリーなメッセージを表示するためにメッセージをカスタムに変更しましたが、localizedDescription を出力すると、それらが表示されます。
ほとんどの iOS 6.0 デバイスでは、コードはまったく問題なく機能しており、メッセージが投稿されています。問題の正確な場所を特定できる人がいたら教えてください。私はこれで何日も過ごしましたが、まだ問題がどこにあるのかわかりません。
編集1 Facebookアプリケーションがインストールされ、ユーザーがそれを介してログインし、ネイティブ設定を介してログインしていない場合、このような問題に直面していることが観察されたパターン。