iOS 6 で共有ダイアログを表示しようとすると、私のアプリは FBNativeDialogs を表示しませんでした!
私は DEFacebookComposeViewController ライブラリを使用しています。ios 4.3、5.0、および 5.1 では問題ありません。アプリが facebooktoken を取得した後にダイアログが表示されます。しかし、iOS 6 では、アプリに facebook トークンがある場合 (ユーザーが facebook でログインした例など、アプリが既にそれを取得していることを意味します)、ダイアログは表示されませんでした。トークンがない場合にのみ表示され、それが機能します。また、iOS 6 DEFacebookComposeViewController では機能しません。FBNativeDialogs はエラー コード 7 を返します。私の質問は、iOS 6 で DEFacebookComposeViewController を呼び出す方法、または Facebook トークンが既にある場合に FBNativeDialogs を使用する方法です。
BOOL displayedNativeDialog = [FBNativeDialogs
presentShareDialogModallyFrom:self
initialText:@""
image:nil
url:[NSURL URLWithString:@"www.google.com"]
handler:^(FBNativeDialogResult result, NSError *error) {
// Only show the error if it is not due to the dialog
// not being supporte, i.e. code = 7, otherwise ignore
// because our fallback will show the share view controller.
if (error && [error code] == 7) {
return;
}
NSString *alertText = @"";
if (error) {
alertText = [NSString stringWithFormat:
@"error: domain = %@, code = %d",
error.domain, error.code];
} else if (result == FBNativeDialogResultSucceeded) {
alertText = @"Posted successfully.";
}
if (![alertText isEqualToString:@""]) {
// Show the result in an alert
[[[UIAlertView alloc] initWithTitle:@"Result"
message:alertText
delegate:self
cancelButtonTitle:@"OK!"
otherButtonTitles:nil]
show];
}
}];
// Fallback, show the view controller that will post using me/feed
if (!displayedNativeDialog)
{
UIDevice *device = [UIDevice currentDevice];
CGFloat systemVersion = [[device systemVersion] floatValue];
if (systemVersion > 5.5)
{
return;
}
DEFacebookComposeViewController *facebookViewComposer = [[DEFacebookComposeViewController alloc] init];
self.modalPresentationStyle = UIModalPresentationCurrentContext;
[facebookViewComposer setInitialText:@""];
[facebookViewComposer addURL:@"www.google.com"]];
[facebookViewComposer setCompletionHandler:^(DEFacebookComposeViewControllerResult result) {
switch (result) {
case DEFacebookComposeViewControllerResultCancelled:
NSLog(@"Facebook Result: Cancelled");
break;
case DEFacebookComposeViewControllerResultDone:
NSLog(@"Facebook Result: Sent");
break;
}
[facebookViewComposer dismissModalViewControllerAnimated:YES];
}];
[self presentModalViewController:facebookViewComposer animated:YES];
[facebookViewComposer release];
}