2012-11-17 3 views
2

Можете ли вы помочь мне понять, когда следует использовать UIActivityViewController. У меня есть кнопка с общей информацией о моем приложении (что-то вроде «Мне нравится это приложение» со ссылкой и изображением). Мой старый код был:Confused using 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 но я немного запутался, как передать все эти параметры к нему. Или я должен делать что-то другим?

ADDED: Так что я понял, что мне нужна тихая процедура проводки. Не могли бы вы направить меня на бесшумную процедуру после использования функций iOS 6 (например, используя встроенную учетную запись FB). На данный момент я не могу понять, как проверить, существует ли учетная запись FB на устройстве, и не подскажет ли она ее создать? Существует метод в классе ACAccount store – requestAccessToAccountsWithType:options:completion: для доступа к учетной записи. Но если учетная запись не существует, она возвращает ошибку. Спасибо заранее.

ответ

1

В вашей ситуации, кажется очевидным, что вы не должны использовать UIActivityViewController потому, что вы хотите опубликовать на Facebook, а не на твиттере или где-нибудь еще, не так ли? Во-первых, вам необходимо получить доступ к учетной записи пользователя. Вы можете сделать это так:

-(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); 
     } 
    }]; 
} 

Если счет не существует, вы должны подсказать пользователю создать его в настройках, а затем попытаться получить базовые разрешения снова.

1

Сначала вам нужно подклассы UIActivity.

Затем вам необходимо переопределить некоторые методы, в том числе activityImage для установки значка и performActivity для выполнения действия.

Если вы не выполняете действие беззвучно, сначала вам нужно дополнительное взаимодействие с пользователем и информацию для вашей пользовательской деятельности (например, как сообщение Twitter для стандартного UIActivity), вы должны переопределить ActivityViewController, а не performActivity.

После того, как вы получили подклассу UIActivity (как, например, MyActivity), вы должны создать экземпляр MyActivity и сделать его элементом массива applicationActivities, который вы передадите initWithActivityItems: applicationActivities :.

Посмотрите на the documentation for UIActivity точно, что вам нужно переопределить при подклассификации и для требований к значкам.

Надеется, что это помогает немного

+0

Спасибо за ответ, но я хочу опубликовать его в Facebook, и для него уже существует UIActivity по умолчанию. Поэтому мне кажется, что мне не нужно использовать UIActivityViewController, потому что мне действительно нужна тихая публикация (без дальнейшего взаимодействия с пользователем) –

+0

Не могли бы вы расширить свой ответ (см. Раздел ADDED в моем вопросе), чтобы я мог его принять? –