web-dev-qa-db-ja.com

iOS 6.0のネイティブFacebook統合との共有:「アプリ名で投稿」?

IOS 6を介してFacebookをアプリに統合しましたが、壁に投稿するときに問題が発生します。 "iosアプリ経由で投稿"とだけ書かれています。 "アプリ名で投稿"と言いたい。 FacebookでアプリIDを作成し、彼らが割り当てたアプリ番号を持っていますが、これをFacebook統合と統合する方法がわかりません。

以下は私のコードです。誰か助けていただければ幸いです。ありがとう!

{
NSString *message;
message= [[NSString alloc] initWithFormat:@"I've earned %@ points", [self retrieveScore]];

if([SLComposeViewController isAvailableForServiceType:SLServiceTypeFacebook]) {

    SLComposeViewController *controller = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeFacebook];
    [controller setInitialText:message];
    [controller addURL:[NSURL URLWithString:@"http://mysite"]];
    [self presentViewController:controller animated:YES completion:Nil];
    [message release];

    SLComposeViewControllerCompletionHandler myBlock = ^(SLComposeViewControllerResult result){
        NSString *output= nil;
        switch (result) {
            case SLComposeViewControllerResultCancelled:
                output= @"Action Cancelled";
                NSLog (@"cancelled");
                break;
            case SLComposeViewControllerResultDone:
                output= @"Post Succesfull";
                NSLog (@"success");
                break;
            default:
                break;
        }
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Facebook" message:output delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil];
        [alert show];
        [alert release];
        [controller dismissViewControllerAnimated:YES completion:Nil];
    };
    controller.completionHandler =myBlock;
      }
44
Alex G

UPDATE-完了できます

Digg for iOS アプリは、アカウントフレームワークを使用せずにFacebookと共有してユーザー権限を取得できます...彼らはUIActivityViewControllerを使用し、投稿を「via Digg」として表示します。 Diggの誰かに連絡しましたが、手動プロセスだと言われました。iOSアプリをApple App Storeで公開し、FacebookアプリケーションをFacebook App Storeで受け入れて公開する必要があります。その後、Facebookはこの2つのリンクを手動で処理できます。

これの明らかな欠点は、UIActivityViewControllerがFacebookとの統合なしでアプリから共有できることを意味し、Facebookアプリを必要としないことです...しかし、「アプリ名を介して」取得するにはFacebookが必要ですFacebookが独自のアプリストアに承認するアプリです。すべてが公開されたら、デベロッパーリレーションに連絡してすべてをリンクする必要があります。

残りの回答(以前の回答)は正しいことに注意してください。解決策はFacebookが行うことができる手動のプロセスであり、iOSコードは影響を受けません。


前の回答と回避策

必要なネイティブのFacebook統合は、実際にはcomposerビューコントローラーです。これは、サービスタイプSLComposeViewControllerSLServiceTypeFacebookクラスを使用して取得されます。

このクラスは一方向の通信のみを提供します。お気づきのように、あなたは投稿ボタンをタップして壁の投稿を確認する人です。このView Controllerは、アプリではなくiOSシステムが所有しています。そして、このCompose View Controllerと対話することにより、実際にアプリケーションをバイパスします。

ユーザーがセキュリティを提供するため、これを行うのが好きです。

アプリケーションがFacebookのより深い双方向の統合によってのみ機能しない限り、SLComposeViewControllerを使用する必要があります(より深い統合は、アプリに友達リストや既存のウォールポスト、アルバムなどが必要であることを意味します)。

アプリケーションから発信された投稿がFacebookで「iOS経由」ではなく「xxxx経由」で表示されるようにするには、SLRequestクラス経由でFacebookとやり取りする必要があります。これを行うには、Account.frameworkに加えてSocial.frameworkも操作する必要があります。

それは、セットアップの点で以前に使用された(そしてまだ使用できる)以前のFacebook iOS SDKに似ており、デバイスのアカウントストアへの参照を取得し、Facebookアカウントをリクエストし、FacebookアプリIDと権限の配列を送信します。

許可された場合、SLRequestクラスを介してFacebook Graph APIと対話できます。このマナーであなたの壁に投稿することにより、あなたは希望の「経由xxx」を持つことになります。

これを使用するには、 SLRequestのドキュメント を確認してください。

この場合、独自の作成ビューを作成する必要があることに注意してください。

もちろん、ネイティブUIからインスピレーションを得たり、iPhotoのiOSアプリをチェックしたり、そのアプリでFacebookに共有してみたり、Facebookアカウントとのやり取りの許可を要求していることに気付くでしょう(SLComposeViewController)、その後、Facebook投稿の作成のためにSLComposeViewControllerに非常に近い何かを提示します。

しかし、よく見ると、同じではないことに気付くでしょう。これは、Twitterとネイティブアプリ対ネイティブ統合にも当てはまります。独自の作成ビューがあり、ネイティブiOS統合(Appleフレームワーク)を使用していることに注意してください。設定>プライバシー> Twitterに移動すると、Twitterアプリが表示されます。デバイスでTwitterアカウントを使用する承認済みアプリ。

Facebookについても同じことが言えます。

許可が得られない場合、アプリとして公開する方法がありません-別名「myApp」。

失望して申し訳ありませんが、ACAccountSLComposeViewControllerに統合する方法も探していましたが、その方法も見つかりませんでした。残念なのは、ネイティブUIが甘いからです。

70
Daniel

最終的に、新しいFacebook SDK 3.1でカスタムFacebookフレームワークを使用することになりました。 Facebook作成ビュー

オリジナルは次のとおりです。 facebook compose view 。いくつかの小さな警告を修正し、新しいFB SDK 3.1で更新しました。

使用法:

DEFacebookComposeViewControllerCompletionHandler __block completionHandler = ^(DEFacebookComposeViewControllerResult result) {
    [self dismissViewControllerAnimated:YES completion:nil];
    switch (result) {
        case DEFacebookComposeViewControllerResultCancelled:
            NSLog(@"Facebook Result: Cancelled");
            break;
        case DEFacebookComposeViewControllerResultDone:
            NSLog(@"Facebook Result: Sent");
            break;
    }
};
DEFacebookComposeViewController * compose = [[DEFacebookComposeViewController alloc] init];
[compose setInitialText:self.shareText];
[compose addImage:self.shareImage];
[compose addURL:self.shareURL];
[compose setCompletionHandler:completionHandler];
[self presentViewController:compose animated:YES completion:^{}];

セットアップ:

  1. プロジェクトを開き、クリーンビルドを実行します。
  2. フォルダー[$PROJECT_FOLDER\build\Debug-iphonesimulatorFBComposeView.frameworkFBComposeView.bundleプロジェクトに。

注:Debug-iphonesimulator。ファットバイナリです。 enter image description here

13
docchang

IOS 5のTwitter統合で同様の問題を解決した結果、次のようになりました。

開発ビルドまたはシミュレーターを使用してTwitterに投稿すると、ほとんどの場合Twitterに「via iOS」として表示されます。アプリが承認され、AppStoreビルドから投稿すると、「iOSのYourAppName」が投稿したアプリアプリストアページへのリンクが表示されます。

元のソース(ShareKitの問題に関する議論)

AppleはFacebookやその他のソーシャルサービスでも同じことを行うと思います。

編集:残念ながら、これはTwitter.frameworkでのみ実際に機能しました。ダニエルの一番上の説明と答えが上のと思います。多分それはレーダーに乗る時であるので、Appleは知っている、私たちは何が欲しいか。

FacebookでSLRequestを使用する方法の例は this SO question

EDIT2:レーダーバグID#12980058を提出しました。うまくいけば...

3
Vilém Kurz