Hướng dẫn chia sẻ SLComposeViewController [đã đóng]


76

Tôi cần làm theo các bước nào để sử dụng iOS 6 mới SLComposeViewControllerđể đăng lên Facebook, Twitter hoặc Sina Weibo?

Câu trả lời:


141

Để biết chi tiết về khung này, vui lòng xem Tham chiếu Lớp Khung xã hội của Apple

Hướng dẫn bổ sung:

  1. http://soulwithmobiletechnology.blogspot.com/2012/07/tutorial-how-to-use-inbuilt.html
  2. http://www.mobile.safilsunny.com/iphone/integrating-facebook-ios/
  3. https://rudeboy-quickies.blogspot.com/2012/06/steps-to-integrate-facebook-in-ios6.html

Đối với ví dụ này, chúng tôi sẽ sử dụng SLComposeViewController's SLServiceTypeFacebook. Nếu bạn muốn sử dụng Twitter hoặc SinaWeibo, chỉ cần thay đổi SLServiceType thành một trong những cách sau:

  • SLServiceTypeFacebook
  • SLServiceTypeSinaWeibo
  • SLServiceTypeTwitter

iOS 6 đã giúp bạn dễ dàng đăng trực tiếp lên Facebook, Twitter hoặc Sina Weibo bằng cách sử dụng SLComposeViewController. Điều này hoạt động rất giống với iOS 5 TWTweetComposeViewController.

Đầu tiên, trong tệp tiêu đề của trình điều khiển chế độ xem (.h) #import, Khung xã hội và Khung tài khoản.

#import <Social/Social.h>

#import <Accounts/Accounts.h>

Ở đây chúng tôi sẽ khai báo một đơn giản UIButtonvà một IBActionmà sau này chúng tôi sẽ liên kết đến nút đó và một void(sharedStatus) sẽ được sử dụng để kiểm tra xem dịch vụ chia sẻ đã chọn có khả dụng hay không.

@interface ViewController : UIViewController

@property (weak, nonatomic) IBOutlet UIButton *easyFacebookButton;
- (IBAction)facebookPost:(id)sender;
- (void)sharingStatus;
@end

@implementation ViewController

Sau đó, trong tệp triển khai của bạn (.m), chúng tôi sẽ bắt đầu bằng cách triển khai void (sharingStatus) mà chúng tôi đã khai báo trong tệp tiêu đề. sharingStatus sử dụng SLComposeViewController's isAvailableForServiceTypeBOOL trở về hay không, bạn có thể gửi đến dịch vụ quy định tại đối số của nó. Trong trường hợp này, chúng tôi sẽ sử dụng loại dịch vụ SLServiceTypeFacebook. Nếu dịch vụ khả dụng, nút đăng sẽ được bật với giá trị alpha là 1,0f và nếu không có dịch vụ, nút sẽ bị vô hiệu hóa giá trị alpha được đặt thành 0,5f.

- (void)sharingStatus {
    if ([SLComposeViewController isAvailableForServiceType:SLServiceTypeFacebook]) {
        NSLog(@"service available");
        self.easyFacebookButton.enabled = YES;
        self.easyFacebookButton.alpha = 1.0f;
    } else {
        self.easyFacebookButton.enabled = NO;
        self.easyFacebookButton.alpha = 0.5f;
    }
}

Ở đây chúng tôi sẽ thiết lập IBActioncái sẽ gọi trình soạn nhạc. Để thực hành tốt, chúng tôi sẽ kiểm tra isAvailableForServiceTypelại để tránh gọi người soạn nhạc cho một loại dịch vụ không khả dụng. (Đã xảy ra sự cố trong lần kiểm tra cuối cùng hoặc nếu tính khả dụng bằng cách nào đó đã thay đổi trong một phần giây giữa việc nhấn vào nút đăng và tất cả các nhà soạn nhạc / init. Đoạn mã dưới đây đã được thiết lập để hiển thị trang tính các nhà soạn nhạc trên Facebook với văn bản, một hình ảnh và một liên kết. Hành động này cũng sử dụng một trình xử lý hoàn thành cho các kết quả đã hủy và hoàn thành của nhà soạn nhạc.

- (IBAction)facebookPost:(id)sender {

    if ([SLComposeViewController isAvailableForServiceType:SLServiceTypeFacebook]) {

        SLComposeViewController *mySLComposerSheet = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeFacebook];

        [mySLComposerSheet setInitialText:@"iOS 6 Social Framework test!"];

        [mySLComposerSheet addImage:[UIImage imageNamed:@"myImage.png"]];

        [mySLComposerSheet addURL:[NSURL URLWithString:@"http://stackoverflow.com/questions/12503287/tutorial-for-slcomposeviewcontroller-sharing"]];

        [mySLComposerSheet setCompletionHandler:^(SLComposeViewControllerResult result) {

             switch (result) {
                 case SLComposeViewControllerResultCancelled:
                     NSLog(@"Post Canceled");
                     break;
                 case SLComposeViewControllerResultDone:
                     NSLog(@"Post Sucessful");
                     break;

                 default:
                     break;
             }
         }];

        [self presentViewController:mySLComposerSheet animated:YES completion:nil];
    }
}

Trong viewWillAppearchúng tôi sẽ đăng ký một người quan sát để ACAccountStoreDidChangeNotificationứng dụng có thể được thông báo khi thông tin tài khoản thay đổi. Người quan sát này sau đó sẽ bị xóa trong viewDidDisappear.

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(sharingStatus) name:ACAccountStoreDidChangeNotification object:nil];
}

- (void)viewDidDisappear:(BOOL)animated
{
    [super viewDidDisappear:animated];
    [[NSNotificationCenter defaultCenter] removeObserver:ACAccountStoreDidChangeNotification];
}

Và cuối cùng, mở trình tạo giao diện và thêm một UIButtonnút sẽ là nút đăng. Sau đó, trong trình kiểm tra kết nối liên kết IBOutletIBActionchúng tôi đã tạo trước đó với nút, và thế là xong! Bạn đã hoàn tất!

nhập mô tả hình ảnh ở đây


1
Xin chào, Đó là một câu trả lời hay, mặc dù tôi có chút nghi ngờ, chúng tôi có thể cung cấp giao diện Đăng nhập trong trường hợp tài khoản twitter / Facebook của người dùng chưa được thiết lập không?
Abhinandan Sahgal

3
@AbhinandanSahgal không, không phải với lớp này. Tuy nhiên, khi hoạt động bình thường, trình soạn nhạc sẽ phát hiện nếu người dùng chưa đăng nhập và đưa ra cảnh báo để đưa họ đến phần cài đặt cho dịch vụ thích hợp để đăng nhập vào tài khoản của họ.
Mick MacCallum

1
@AbhinandanSahgal Xin lỗi, nhưng không, tôi không thể. Đây là hành vi xây dựng sẽ tự động hoạt động nếu bạn chưa đăng nhập. Ngoài ra, Apple đã từng cung cấp API để đưa người dùng đến ứng dụng tùy chọn, nhưng nó đã bị xóa trong iOS 5.1 :(
Mick MacCallum

7
Không cần liên kết đến Accounts.framework khi sử dụng Social.framework. Ngoài ra, có thể là một bất lợi khi kiểm tra xem một dịch vụ có khả dụng hay không vì hệ điều hành sẽ tự động thực hiện việc này và không thành công với cảnh báo có nút Cài đặt.
martinjbaker

1
Không kiểm tra [SLComposeViewController isAvailableForServiceType: ...] và nếu dịch vụ đó không được thiết lập trong ứng dụng Cài đặt, khung sẽ bật lên một cảnh báo cho biết vấn đề đó cùng với một nút để đi vào cài đặt.
Surpher

25

Chỉ cần sử dụng mã này để chia sẻ trên Facebook.

SLComposeViewController *controllerSLC = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeFacebook];
[controllerSLC setInitialText:@"First post from my iPhone app"];
[controllerSLC addURL:[NSURL URLWithString:@"http://www.appcoda.com"]];
[controllerSLC addImage:[UIImage imageNamed:@"test.jpg"]];
[self presentViewController:controllerSLC animated:YES completion:Nil];

Nếu bạn muốn điều này cho Twitter thì chỉ cần thay đổi SLServiceTypeTwitter.


đang gặp sự cố trang Cài đặt với mã của bạn.
sabir,

@sabir Tôi không hiểu bạn, bạn có thể giải thích nó không?
Desert Rose

1
Khi Tài khoản Facebook trống trong thiết bị của bạn, nó hiển thị cảnh báo với nút cài đặt và nút hủy khi tôi nhấp vào nút cài đặt, nó sẽ chuyển đến trang cài đặt, nó hoạt động tốt lên đến IOS 6.01 nhưng trong IOS 7 nút cài đặt không đưa tôi đến cài đặt page.so bạn có ý kiến ​​gì về điều này không
sabir

1
Bạn đã thử nghiệm nó trên thiết bị chưa? Trong giả lập, vấn đề này cũng có trong ios 6.
Desert Rose

[controllerSLC setInitialText: @ ".."]; hiện không được dùng nữa.
Vicky

13

Sử dụng an toàn SLComposeViewController

if ([SLComposeViewController isAvailableForServiceType:SLServiceTypeFacebook])
    {
        SLComposeViewController *fbPost = [SLComposeViewController
                                               composeViewControllerForServiceType: SLServiceTypeFacebook];
        [fbPost setInitialText:@"Text You want to Share"];
        [fbPost addImage:[UIImage imageNamed:@"shareImage.png"]];
        [self presentViewController:fbPost animated:YES completion:nil];
        [fbPost setCompletionHandler:^(SLComposeViewControllerResult result) {
            switch (result) {
                case SLComposeViewControllerResultCancelled:
                    NSLog(@"Post Canceled");
                    break;
                case SLComposeViewControllerResultDone:
                    NSLog(@"Post Sucessful");
                    break;
                default:
                    break;
            }
            [self dismissViewControllerAnimated:YES completion:nil];
        }];
    }
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.