0

新しいFacebookSDK3.1とiOS6を使用して、投稿する方法は2つ(実際には3つ)あります。

(新しいトレンドは、よりシンプルにするためのオプションが増えることだと思われますか??)OMG !!

これが1つです:

SLComposeViewController *fbPost = [SLComposeViewController      composeViewControllerForServiceType:SLServiceTypeFacebook];
[fbPost addURL:[NSURL URLWithString:href]];
[self presentViewController:fbPost animated:YES completion:nil];

そして、これはネイティブダイアログを使用する別の方法です。

[FBNativeDialogs presentShareDialogModallyFrom:self
 initialText: nil
 image: nil
 url: [NSURL URLWithString:href]
 handler:^(FBNativeDialogResult result, NSError *error) {

     if (error) {

     }
     else
     {

         switch (result) {
             case FBNativeDialogResultSucceeded:

                 break;
             case FBNativeDialogResultCancelled:

                 break;
             case FBNativeDialogResultError:

                 break;
        }

     }

 }];

私たち開発者は、ユーザーに優れた機能を提供し、アプリ名が投稿に表示され、アプリの宣伝に役立つため、これはすばらしいと思います。

面白いことに、最新の実装では、投稿されたアプリ名を指定できません。名前は「via」の後に表示されます。

SLRequestを使用してみました:

ACAccountStore *store = [[ACAccountStore alloc] init];

ACAccountType *fbType = [store accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierFacebook];

NSMutableDictionary *options = [[NSMutableDictionary alloc] init];
(options)[@"ACFacebookAppIdKey"] = kFacebookAppID;
(options)[@"ACFacebookPermissionsKey"] = @[@"publish_stream"];
(options)[@"ACFacebookAudienceKey"] = ACFacebookAudienceFriends;


[store requestAccessToAccountsWithType:fbType options:options completion:^(BOOL granted, NSError *error) {
    if(granted) {
        // Get the list of Twitter accounts.
        NSArray *fbAccounts = [store accountsWithAccountType:fbType];

        NSMutableDictionary *params = [[NSMutableDictionary alloc] init];

        (params)[@"link"] = href;
//            (params)[@"picture"] = picture;
//            (params)[@"name"] = name;
        (params)[@"actions"] = @"{\"name\": \"Go Gabi\", \"link\": \"http://www.gogogabi.com\"}";

        //Set twitter API call
        SLRequest *postRequest = [SLRequest requestForServiceType:SLServiceTypeFacebook requestMethod:SLRequestMethodPOST
                                                              URL:[NSURL URLWithString:@"https://www.facebook.com/dialog/feed"] parameters:params];
        //Set account


        [postRequest setAccount: [fbAccounts lastObject]];
        [postRequest performRequestWithHandler:^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error) {

            if(error)
            {
                NSLog(@"%@", error.description);
            }
            else
            {
                NSLog(@"%@", [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding]);

            }

        }];

    } else {


    }
}];

残念ながら、その名前を共有することはもはや簡単ではありません。なぜ、誰が新しい実装を設計したのか疑問に思います...事前に感謝します。

とても些細なトピックに時間を費やすのはとても退屈なので、私は私の質問を面白くしようとしています...

4

1 に答える 1

5

を使用する場合、SLComposeViewController実際にはコントローラーを提示するのはシステムであり、投稿ボタンを使用して送信するのはユーザーです。したがって、Facebook では「iOS 経由」と表示されます。

それを変える方法はありません。

Facebook SDK 3.1 を使用して、内部では iOS 6 ネイティブ統合も使用しているため、FBNativeDialogsiOS 6 で を呼び出すときは を使用していSLComposeViewControllerます。

Facebook は SDK の開発を続けました。これは、「すぐに」使用できるいくつかの優れたモジュールを提供しているためです。これには、フレンド リスト セレクターなどが含まれます。iOS 6 を使用していない場合は内部でライブラリにフォールバックし、iOS 6 を使用している場合はシステム統合を使用します。

Facebook は大きな存在であり、昨年の Twitter の統合と同様に、ネイティブで利用できるようになり、多くの開発者が Facebook を使用するようになりました。もちろん問題は、その時点で開発者が古い iOS サポートをやめるオプションを持っていることですSLComposeViewController。古い Facebook SDK... これがすぐに非常に面倒になることは容易に想像できます。

そのため、Facebook SDK (3.1) は、利用可能な場合は iOS システムの Facebook 統合を使用しており、利用できない場合は独自のものです。一言で言えば、本当に Facebook SDK グッズ (フレンド ピケットの名前を挙げてください) が必要で、iOS 6 未満をサポートする予定がない場合を除き、SDK について心配する必要はなく、ソーシャル フレームワークを使用するだけです。

では、質問に戻りますが、Facebook に投稿するには 3 つの方法があります。実際に私が言ったことを考慮すると、iOS 6 には 2 つの方法がありSLComposeViewControllerますSLRequest。古い iOS バージョンでは、Facebook SDK は 1 つだけです。

SLComposeViewControllerはアプリではなくシステムによって所有されるため、常に「iOS 経由」として共有されます。

一方SLRequest、アプリ名が表示されます。のアカウントを指定すると、投稿の一部としてユーザー フィードに投稿する Facebook アプリ名を決定するために使用されるなどのいくつかのオプションを渡した結果SLRequest、そのアカウントが 経由で取得されました。ACAccountStoreACFacebookAppIdKey

お役に立てれば。

于 2012-10-12T03:38:53.353 に答える