4

アプリケーションからページのような機能を実装しようとしています。最新のものを追加Facebook SDKし、すべてのデリゲートとハンドラーを実装して、アプリへのユーザー ログインのセッションとステータスを確認しました。ここまでは問題なく動作しています (サンプル コードでは既に実行されています)。とにかく、私は Facebook 開発者サイトから次のコードを見つけて、ページを気に入ったようですが、うまくいかないようです。

- (void) likeFacebookIndia
{
    NSMutableDictionary<FBGraphObject> *action = [FBGraphObject graphObject];
    action[@"object"] = @"http://www.facebook.com/FacebookIndia";
    //action[@"object"] = @"FacebookIndia";
    [FBRequestConnection startForPostWithGraphPath:@"me/og.likes"
                                       graphObject:action
                                 completionHandler:^ (FBRequestConnection *connection,
                                                     id result,
                                                     NSError *error)
     {
         // handle the result
         if(error)
         {
             NSLog(@"%@",error.localizedDescription);
         }
         else
         {
             NSLog(@"%@",result);
         }
     }];
}

ログインに成功したら、上記の関数を呼び出していましたが、likeFacebookIndiaブロック内の次のエラーが発生します。

操作を完了できませんでした。(com.facebook.sdk エラー 5.)

ここで、私の質問は、

  1. これがページを気に入る正しい方法かどうかわかりません。

  2. それが正しければ、私が本当に見逃しているのは何ですか?

  3. 他に方法はありますか?

私はすでにページにアクセスしましたが、ここではすでに多くの質問がありましたが、最新のアップデートで動作するものは1つもありませFacebookLikeViewん. でページをいいねできましたが、それには多くの問題があります。FBLikeButtonFacebook SDKFacebookLikeView

  1. ページのようにAUIKeyBoardが表示されます
  2. ログインが必要な場合、Facebook ページの読み込みに時間がかかり、
  3. 同じページに 2 回目のいいねをすると、いいねのビューがどこかに消えます。

更新 Graph API Explorer で同じことをテストしたところ、次の結果が得られました。

グラフ API エクスプローラー

{ "error": { "message": "(#100) Like actions are not yet supported against objects of this type.", "type": "OAuthException", "code": 100 } }

更新 2

私はFacebookLikeViewクラスにハッキングし、私が書いた上記の問題を解決しましたが、今はうまくいくはずですか? いいえ、機能していません。使用しFBConnectているのは時代遅れであり、Facebook SDKうまく機能している他のものも最新です。FacebookLikeView 用の最新の SDK を使って新しいプロジェクトを作ってくれる人がいるといいです。【もう働いてる!】

これが私がやっている方法です、

//Calling this function in `viewDidLoad`

- (void) addLikeView
{
    facebookLikeView.delegate = self;
    facebookLikeView.href = [NSURL URLWithString:@"http://www.facebook.com/FacebookIndia"];
    facebookLikeView.layout = @"button_count";
    facebookLikeView.showFaces = NO;
    facebookLikeView.alpha = 0;
    [facebookLikeView load];
}

#pragma mark - Facebook Delegate
-(void)sessionDoneForPageShare:(FBSession *)session state:(FBSessionState)state error:(NSError *)error
{        
    if(error)
    {
        NSLog(@"error : %@",error);
    }
    else
    {
        [facebookLikeView load]; //In logged in or logged out, we've to call this
    }
}

- (void)facebookViewControllerCancelWasPressed:(id)sender
{
    NSLog(@"Login was cancelled by user");
}

- (void)facebookViewControllerDoneWasPressed:(id)sender
{
    NSLog(@"User tapped done button on login view");
}

- (void) checkFBloggedInStatus
{
    if (!FBSession.activeSession.isOpen)
    {
        NSArray *permissions = [NSArray array];
        [FBSession openActiveSessionWithPublishPermissions:permissions defaultAudience:FBSessionDefaultAudienceOnlyMe allowLoginUI:YES completionHandler:^(FBSession *session, FBSessionState status, NSError *error){
            [self sessionDoneForPageShare:session state:status error:error];}
         ];
    }
}

#pragma mark FacebookLikeViewDelegate methods
- (void)facebookLikeViewRequiresLogin:(FacebookLikeView *)aFacebookLikeView {
    [self checkFBloggedInStatus];
}

- (void)facebookLikeViewDidRender:(FacebookLikeView *)aFacebookLikeView {
    [UIView beginAnimations:@"" context:nil];
    [UIView setAnimationDelay:0.5];
    facebookLikeView.alpha = 1;
    [UIView commitAnimations];
}

- (void)facebookLikeViewDidLike:(FacebookLikeView *)aFacebookLikeView {
    NSLog(@"liked");
}

- (void)facebookLikeViewDidUnlike:(FacebookLikeView *)aFacebookLikeView {
    NSLog(@"unliked");
}

- (void)facebookLikeView:(FacebookLikeView *)aFacebookLikeView didFailLoadWithError:(NSError *)error
{
    NSLog(@"FacebookLikeView error: %@",error);
}

これで、いいねボタンが表示され、ブラウザにログインできるようになりますが、何も起こりません! 毎回いいねボタンが表示されます!

これは古いSDKでうまく機能していましたがFBConnect、問題は最新のものです。ここFacebook SDK見つけることができます。FacebookLikeView

私は何が欠けていますか?

4

2 に答える 2

4

ビッグアップデート!

これは、アプリケーションで (Facebook のページや Open Graph オブジェクトなど) サポートするものにパッチを適用 (またはハッキング) する必要がないことを意味します。Facebook iOS SDK (FacebookSDK.framework) の最新リリースでは、いいね! ボタンがサポートされていますが (私がこの更新を書いている間)、それbetaは . .

これは、変更ログといいねボタンへの直接リンクと、はいのドキュメントです。

解決策: [推奨]

[いいね] ボタンは、Facebook ページまたは任意の Open Graph オブジェクトを気に入るのに使用でき、URL または ID で参照できます。コードは次のようになります。

FBLikeControl *like = [[FBLikeControl alloc] init];
like.objectID = @"http://shareitexampleapp.parseapp.com/photo1/";
[self addSubview:like];

ここに画像の説明を入力

(出典:ドキュメンテーション)。


昔ながらの方法[非推奨]

最後に、私は自分の問題を解決することができました。解決策の手順を記載しているので、この種のものを探している人にとっては本当に役に立ちます。

あなたが知る必要があるかもしれないいくつかのこと(私の質問から)

  • アプリで FBConnect と Facebook SDK を同時に使用しています。
  • どちらも正常に動作しています。FBConnect は専用ですFacebookLikeView。最新の SDK と競合しないように、FBRequest クラスを別の名前で FBConnect に置き換える必要があります。
  • これは完璧な解決策ではないため、簡単で迅速な解決策が必要です。

では、行きましょう。

この特定のページがユーザーに気に入られているかどうかを知るにはどうすればよいでしょうか?

Graph API を使用して、ユーザーのいいねを確認する必要があります。ここに例があります。

https://graph.facebook.com/{USER_ID}/likes/{PAGE_ID}

ユーザーが問題のページを気に入った場合、ユーザーがそのページを気に入った場合、次のような JSON が返されます。

{
  "data": [
    {
      "name": "SomeCafe", 
      "category": "Restaurant/cafe", 
      "id": "someIdWillCome", 
      "created_time": "2013-05-07T12:32:00+0000"
    }
  ], 
  "paging": {
    "next": "https://graph.facebook.com/me/likes/someIdWillCome?format=json&limit=5000&offset=5000&__after_id=someIdWillCome"
  }
}

ユーザーがページを気に入らない場合は、次のようにします。

{
  "data": [
  ]
}

ユーザーのいいねに関するドキュメントは次のとおりです: https://developers.facebook.com/docs/reference/api/user/#likes

実装

FacebookLikeView1)ドキュメントに記載されているとおりに実装します。

2) から取得できなかったため、上記の URL を呼び出す HTTP リクエストを 1 つ実装して、そのページの現在のステータスを確認する必要がありますFacebookLikeViewaccess_token と一緒に GET リクエストを行う必要があることに注意してください。

3) 応答を確認し (上記の例に近い)、必要に応じて実行します。

それでおしまい!

FacebookLikeViewこれが私が直面した問題の解決策です


1)FacebookLikeViewどこかに行った?

コメントのポップオーバーがそれを隠しているからです! 以下は解決策です

FacebookLikeView.mクラスで探します,そしてこれらの行を最後- (void)didObserveFacebookEvent:(NSString *)fbEvent に 追加します,

if([[[UIDevice currentDevice] systemVersion] floatValue] >= 5.0f)
{
    //NS_AVAILABLE_IOS(5_0);
    [[_webView scrollView] setContentOffset: CGPointMake (0, 0)];
}

2) FacebookLikeView は UIKeyboard を表示します!!

これは、ページのようにコメント テキスト ボックスにフォーカスがあるためです。以下はその解決策です。

- (void) keyboardWasShown:(NSNotification *)notification
{
    //force hide UIKeyBoard
    [self.view endEditing:YES];
}

viewDidLoad実装するクラスに通知を追加しました

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWasShown:) name:UIKeyboardWillShowNotification object:nil];

これにより、その特定のビューから表示されるすべてのキーボードが辞任します。私の場合UITextField、Facebookのいいねボタンが必要な場所はありません。そのため、ケースが異なる場合は、この点を確認してください.

3)読み込みが遅い問題は、Facebook サーバー、インターネット接続、またはその他の多くの要因に依存しているため、読み込みインジケータを追加しました -時間がかかりますが、思い通りに動作します!.


これにより、Facebook ページのように、または Facebook ページとは異なり、その特定のユーザーの現在のステータスを知ることができるので、何をすべきかを決めることができます!

最後に、この問題をチェックして返信してくれた皆さんに感謝します! 感謝!:)

于 2013-05-13T12:04:08.397 に答える