0

我的目标:

  • 在我的应用程序中,我希望用户能够在他们的墙上分享东西

由于 facebook 直接内置在 iOS 6 中,我想利用 iOS 设置屏幕中的登录凭据,这样没有人需要在我的应用程序中输入他们的用户名/密码。

我希望我的用户直接跳转到 facebook 上的权限对话框。

有人告诉我使用默认对象来访问这些登录凭据:

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

但这不起作用:即使我重置了我的模拟器,在 iOS 上的设置中添加了我的用户名,我仍然会在我的应用程序中看到一个登录屏幕,但我只希望获得权限。

我还在 delegate.m 中添加了推荐的行:

#pragma mark Facebook

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {
    return [self.facebook handleOpenURL:url];
}

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
    return [self.facebook handleOpenURL:url];
}

我不想每次登录都打扰我的用户。

我做错了什么?

4

2 回答 2

1

我建议你看一下Accounts.framework-Social.frameworks前者让你可以通过类访问用户的社交帐户ACAccount,然后你可以使用它来创建SLRequest对象来运行你的社交请求。

如果您只是想在墙上分享内容,您也许可以完全绕过这些步骤并使用SLComposeViewController,它提供了一个模态视图来通过 Facebook、Twitter 或微博分享媒体。Apple 为所有这些类提供了文档和示例代码。

于 2013-03-10T16:14:41.050 回答
1

您使用 facebook sdk 代码。你想使用这样的东西,它利用了 iOS 6 社交框架。

#import <Accounts/Accounts.h>
#import <Social/Social.h>


ACAccountStore *accountStore = [[[ACAccountStore alloc] init] autorelease];

 ACAccountType * facebookAccountType = [accountStore accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierFacebook];

    NSArray * permissions = @[@"publish_stream"];

    NSMutableDictionary *dict = [[NSMutableDictionary alloc]initWithObjectsAndKeys:@"whateverYourFacebookKeyIs",ACFacebookAppIdKey,permissions,ACFacebookPermissionsKey,ACFacebookAudienceFriends,ACFacebookAudienceKey, nil];

    [accountStore requestAccessToAccountsWithType:facebookAccountType options:dict completion:^(BOOL granted, NSError *error) {
        if (granted && error == nil) {
            /**
             * Now we can ask for more permissions
             **/
            NSArray *readPermissions = @[@"read_stream"];
            [dict setObject:readPermissions forKey: ACFacebookPermissionsKey];

            [accountStore requestAccessToAccountsWithType:facebookAccountType options:dict completion:^(BOOL granted, NSError *error) {
                if(granted && error == nil) {

                } else {
                    NSLog(@"error is: %@",[error description]);
                    [self performSelectorOnMainThread:@selector(showFacebookAlert) withObject:nil waitUntilDone:NO];
                }
            }];
        } else {
            NSLog(@"error is: %@",[error description]);
            [self performSelectorOnMainThread:@selector(showFacebookAlert) withObject:nil waitUntilDone:NO];
        }
    }];
于 2013-03-10T18:36:12.087 回答