44

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;
      }
4

3 に答える 3

70

更新-それは行うことができます

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

これの明らかな欠点はUIActivityViewController、Facebookと統合せずにアプリから共有できることを意味します。Facebookアプリは必要ありません...しかし、「アプリ名を介して」取得するには、Facebookが承認するFacebookアプリが必要になります。独自のアプリストア。すべてが公開されたら、開発者関係に連絡してすべてをリンクする必要があります。

私の答えの残りの部分(私の前の答え)は正しいことに注意してください。解決策はFacebookがあなたのために行うことができる手動プロセスであり、あなたのiOSコードは影響を受けないはずです。


前の回答と回避策

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

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

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

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

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

これは、セットアップの点で以前に使用された(そして引き続き使用できる)以前のFacebook iOS SDKに似ており、デバイスのアカウントストアへの参照を取得し、Facebookアカウントを要求し、FacebookアプリIDと一連のアクセス許可を送信します。

SLRequest許可された場合は、クラスを介してFacebookGraphAPIを操作できます。この邸宅の壁に投稿することで、希望の「xxx経由」を手に入れることができます。

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

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

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

しかし、よく見ると、同じではないことに気付くでしょう。これは、Twitterとそのネイティブアプリとネイティブ統合にも当てはまります。彼らは独自の構成ビューを持っています、彼らがネイティブのiOS統合(Appleフレームワーク)を使用していることに注意することは本当に興味深いです。[設定]>[プライバシー]>[Twitter]に移動すると、TwitterアプリがデバイスのTwitterアカウントを使用して承認されたアプリであることがわかります。

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

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

失望させて申し訳ありませんが、私もに統合する方法を探していACAccountましたSLComposeViewControllerが、方法も見つかりませんでした。これは残念です...ネイティブUIが甘いからです。

于 2012-09-26T15:28:09.440 に答える
13

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

オリジナルはここにあります:facebookcomposeview。いくつかのマイナーな警告を修正し、新しいFBSDK3.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-iphonesimulatorの両方をプロジェクトにドラッグします。FBComposeView.frameworkFBComposeView.bundle

注:必ず。にあるものを使用してくださいDebug-iphonesimulator。ファットバイナリです。 ここに画像の説明を入力してください

于 2012-09-26T18:21:23.860 に答える
3

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

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

元のソース(ShareKitの問題に関するディスカッション)

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

編集:残念ながら、これはTwitter.frameworkでのみ実際に機能しました。最良の説明と答えは上記のダニエルのものだと思います。たぶん、それをレーダーする時が来たので、Appleは私たちが何を望んでいるのかを知ることができます。

FacebookでSLRequestを使用する方法の例は、このSOの質問にあります

EDIT2:レーダーバグID#12980058を提出しました。うまくいけば彼らは聞いています...

于 2012-11-15T15:37:34.183 に答える