15

私はiOS6次のように新しいFacebook統合を使用しています:

SLComposeViewController *fbController = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeFacebook];

if([SLComposeViewController isAvailableForServiceType:SLServiceTypeFacebook]) {
    SLComposeViewControllerCompletionHandler __block completionHandler=^(SLComposeViewControllerResult result){

        [fbController dismissViewControllerAnimated:YES completion:nil];

        switch(result){
            case SLComposeViewControllerResultCancelled:
            default:
            {
                NSLog(@"Cancelled.....");

            }
                break;
            case SLComposeViewControllerResultDone:
            {
                NSLog(@"Posted....");
            }
                break;
        }};

    //[fbController addImage:[UIImage imageNamed:@"1.jpg"]];
    [fbController setInitialText:@"Test message"];
    [fbController addURL:[NSURL URLWithString:self.asset.url]];
    [fbController setCompletionHandler:completionHandler];
    [self presentViewController:fbController animated:YES completion:nil];
} else {
    NSLog(@"no facebook setup");
}

ここでの問題は、ログインせずにテストしていてFacebook、ログメッセージだけが表示されることです。

**奇妙なことに、シミュレーターでダイアログが表示されますが、デバイスは表示されません!**

Facebookにログインする必要があることをユーザーに通知するアラートをユーザーに表示するにはどうすればよいですか?システムアラートのスクリーンショットを見たことがありますが、何らかの理由でそれが表示されません。私は何を間違えましたか?

4

3 に答える 3

28

チェックを削除すると[SLComposeViewController isAvailableForServiceType:SLServiceTypeFacebook]、問題が修正されました。

于 2012-09-21T18:55:14.153 に答える
7

[SLComposeViewController isAvailableForServiceType:]アカウントを設定していなくても、シミュレーターではtrueが返されるようです。

于 2013-02-04T19:50:40.593 に答える
1

システムアラートが表示されることはないと思います(わかりませんが、Twitterの経験に基づいています)。最近のブログやウェブの投稿で見たことがありますが、私にとっても機能していません。このような場合は、ユーザーのFBクレデンシャル(カスタムダイアログまたはFBDialog)を要求し、iPadにFBアカウントを追加することをお勧めします。以下のコードはテストされていませんが、アイデアを得ることができます。私はTwitterでも同様のことをしていますが、それは私のアプリで正常に機能しています。

ACAccountStore *store = [[ACAccountStore alloc] init] ;
    ACAccountType *fbType = [store accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierFacebook];
    [store requestAccessToAccountsWithType:fbType options:[NSDictionary dictionaryWithObjectsAndKeys:kAppID,ACFacebookAppIdKey, nil] completion:^(BOOL granted, NSError *error) {
        if(YES) {
            ACAccount *fbAccount = [[ACAccount alloc] initWithAccountType:[store accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierFacebook]];

            ACAccountCredential *outhCredential = [[ACAccountCredential alloc] initWithOAuth2Token:[appDelegate.facebook accessToken] refreshToken:refesrhToken expiryDate:[appDelegate.facebook expirationDate]];


            fbAccount.credential = outhCredential;

            [store saveAccount:fbAccount withCompletionHandler:^(BOOL success, NSError *error) {
                if(success)
                {
                    [self performSelectorOnMainThread:@selector(showFBPostSheet) withObject:nil waitUntilDone:NO];
                }
            }];

            [outhCredential release];
            [fbAccount release];
            [store release];
        }
        // Handle any error state here as you wish
    }];
于 2012-09-21T18:36:25.997 に答える