2

你能帮我理解什么时候应该使用UIActivityViewController. 我有一个按钮,可以共享有关我的应用程序的常见信息(例如带有链接和图像的“我喜欢这个应用程序”)。我的旧代码是:

NSMutableDictionary *params = [NSMutableDictionary dictionary];
[params setObject:picture forKey:@"picture"];
[params setObject:link forKey:@"link"];
[params setObject:@"I like MY app!" forKey:@"caption"];
[params setObject:@"I am now using MY iPhone app." forKey:@"description"];
[params setObject:linkToTheIcon forKey:@"icon"];
[params setObject:@"including link" forKey:@"type"];
[[FacebookConnection instance] feedLink:params andDelegate:self];

现在我想使用UIActivityViewController,但我有点困惑如何将所有这些参数传递给它。还是我应该以其他方式做事?

补充:所以我明白我需要静默发布程序。您能否指导我完成使用 iOS 6 功能的静默发布程序(使用内置 FB 帐户编辑​​)。现在我不明白如何检查设备上是否存在FB帐户,如果不是如何提示创建它?ACAccount 存储类– requestAccessToAccountsWithType:options:completion:中有一个访问帐户的方法。但如果帐户不存在,则会返回错误。提前谢谢了。

4

2 回答 2

1

在您的情况下,您显然不应该使用UIActivityViewController,因为您想在 Facebook 上而不是在 Twitter 或其他任何地方发帖,对吧?首先,您需要访问用户的帐户。你这样做:

-(void)requestBasicPermissionsForFacebookAccount {
    ACAccountType * facebookAccountType = [self.accountStore accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierFacebook];
    NSArray * permissions = @[@"email"];
    NSDictionary * options = @{ACFacebookAppIdKey : kFacebookAppId, ACFacebookPermissionsKey : permissions, ACFacebookAudienceKey : ACFacebookAudienceEveryone};
    FacebookAccountManager * fbMgr = [[FacebookAccountManager alloc] init];
    [self.accountStore requestAccessToAccountsWithType:facebookAccountType options:options completion:^(BOOL granted, NSError *error) {
        if (granted) {
            NSArray * accounts = [self.accountStore accountsWithAccountType:facebookAccountType];
            fbMgr.account = [accounts lastObject];
            fbMgr.isBasicPermissionsGranted = YES;
            [self.accountManagers addObject:fbMgr];
            NSLog(@"granted!");
        }
        else {
            fbMgr.account = nil;
            fbMgr.isBasicPermissionsGranted = NO;
            switch ([error code]) {
                case 1:
                    [self showErrorAlertWithMessage:@"Unknown error occured, try again later!"];
                    break;
                case 3:
                    [self showErrorAlertWithMessage:@"Authentication failed, try again later!"];
                     break;
                case 6:
                    [self showErrorAlertWithMessage:@"Facebook account does not exists. Please create it in Settings and come back!"];
                     break;
                 case 7:
                    [self showErrorAlertWithMessage:@"Permission request failed. You won't be able to share information to Facebook"];
                     break;
                default:
                    break;
            }
            NSLog(@"error is: %@", error);
        }
    }];
}

如果帐户不存在,您应该提示用户在设置中创建它,然后尝试再次获取基本权限。

于 2012-11-22T09:53:44.247 回答
1

您首先需要继承 UIActivity。

然后您需要重写某些方法,包括用于设置图标的 activityImage 和用于执行操作的 performActivity 。

如果不是静默执行操作,而是首先需要进一步的用户交互和自定义活动的信息(例如,标准 UIActivity 的 Twitter 帖子),则应该覆盖 activityViewController 而不是 performActivity。

在继承了 UIActivity(例如 MyActivity)之后,您应该创建 MyActivity 的一个实例,并使其成为您传递给 initWithActivityItems:applicationActivities: 的 applicationActivities 数组的一个元素。

查看UIActivity 的文档,了解在子类化和图标要求时需要覆盖的确切内容。

希望这有所帮助

于 2012-11-17T17:23:29.200 回答