0
- (id)init {
if (self == [super init]) {
    facebook = [[Facebook alloc] initWithAppId:kAppId];

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    if ([defaults objectForKey:@"FBAccessTokenKey"] 
        && [defaults objectForKey:@"FBExpirationDateKey"]) {
        facebook.accessToken = [defaults objectForKey:@"FBAccessTokenKey"];
        facebook.expirationDate = [defaults objectForKey:@"FBExpirationDateKey"];
    }

    if (![facebook isSessionValid]) {
        permissions =  [[NSArray arrayWithObjects:
                         @"read_stream", @"user_birthday", 
                         @"publish_stream", nil] retain];
        [facebook authorize:permissions delegate:self];
    }

    [self login];
}
return self;

}

- (void)login {
if (![_session isConnected]) {
    [self postToWall];  
}


if (![facebook isSessionValid]) {
   [facebook authorize:permissions delegate:self];
}
}

- (void)fbdidLogin {
[[NSUserDefaults standardUserDefaults] setObject:self.facebook.accessToken forKey:@"FBAccessToken"];
[[NSUserDefaults standardUserDefaults] setObject:self.facebook.expirationDate forKey:@"FBExpirationDate"];

// User has logged in to Facebook, now get their userId from Facebook
[facebook requestWithGraphPath:@"me" andDelegate:self];
}

-(void)postToWall
{
SBJSON *jsonWriter = [[SBJSON new] autorelease];

NSDictionary *actionLinks = [NSArray arrayWithObjects:[NSDictionary dictionaryWithObjectsAndKeys:
                                                       @"Always Running",@"text",@"http://itsti.me/",@"href", nil], nil];

NSString *actionLinksStr = [jsonWriter stringWithObject:actionLinks];
NSDictionary *attachment = [NSDictionary dictionaryWithObjectsAndKeys:
                            @"Your Happiness!", @"name",
                            @"asda", @"caption",
                            @"asdf", @"description",
                            nil];
NSString *attachmentStr = [jsonWriter stringWithObject:attachment];
NSMutableDictionary *params = [NSMutableDictionary dictionaryWithObjectsAndKeys:
                               @"Share on Facebook",  @"user_message_prompt",
                               actionLinksStr, @"action_links",
                               attachmentStr, @"attachment",
                               nil];


[facebook dialog:@"stream.publish" andParams:params andDelegate:self];

}

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {

return [facebook handleOpenURL:url]; 
}

これがFacebookのダイアログボックスを呼び出すための私の方法ですが、クリックして公開のためにスコアを付けるたびに、許可ボックスが最初に来ました。その後、公開ダイアログボックスが来るので許可を与える必要があります。許可を与えたいのですが、それが欲しいです。保存するには、保存した後、許可ボックスが表示されないようにします。どうすればよいですか?コードの何が問題になっていますか?

編集:私のアクセストークンと有効期限はnullです。これが原因だと思います。

4

2 に答える 2

1

確認すべき点がいくつかあります。fbDidLoginではなく、メソッドログイン処理メソッド「fbdidLogin」を呼び出します。これは大文字と小文字が区別されます。

ビューコントローラのヘッダーファイルで、サポートするプロトコルの1つとしてFBSessionDelegateを追加したことを確認してください。これが、fbDidLoginが呼び出されない理由である可能性があります。いつでもNSLogを追加して、fbDidLoginメソッドに到達したことを確認できます。

于 2011-08-16T16:39:06.257 に答える
0

Facebookのシングルサインオン機能を実装する必要があります。

http://developers.facebook.com/docs/guides/mobile/#ios

このリンクには、SSOを実装するためのステップバイステップガイドがあります。注意深く従うと、アプリは一度許可を要求し、その後は(ユーザーがアプリを削除するまで)許可を再度要求することはありません。

www.facebook.comにアクセスし、「開発者ツール」を使用して新しいFacebookアプリを作成する必要があります。アプリの管理者になり、AppIDを取得します。これも必要です。

于 2011-08-16T09:15:18.100 に答える