2

J'espère que vous pouvez aider, je suis un peu à la fin de mon esprit ici .... Je travaille sur une application Rails et en cours d'exécution Koala pour se connecter avec Facebook API graphique. Je veux maintenir une liste à jour des amis d'un utilisateur qui utilisent mon application, donc j'ai essayé d'implémenter la fonctionnalité Mises à jour en temps réel de la gemme Koala. Mon application est déployée sur Heroku et je cours Resque avec Redis-to-Go pour gérer les appels de Facebook ... malheureusement, je ne semble pas en recevoir même si mes pings de tests sur le serveur Facebook sont tous retournés vrai . Voici le code que je travaille avec:Ne pas recevoir des messages de Facebook en temps réel des abonnements API avec Rails et Koala

Realtime Controller: 

class RealtimeController < ApplicationController 
skip_before_filter :logged_in_check 

    layout nil 
    VERIFY_TOKEN = "purple-rain" 

    def create 
    Friendship.real_time_update!(params) 
    render :text => 'success' 
    end 

    def index 
    Rails.logger.info("RealTimeController verification") 
    render :text=>Koala::Facebook::RealtimeUpdates.meet_challenge(params, VERIFY_TOKEN) 
    end 

end 




Friendship Controller: 

class Friendship < ActiveRecord::Base 
    attr_accessible :friend_id, :user_id 

    belongs_to :users, :foreign_key => "user_id" 
    belongs_to :friends_ids, :class_name => "users", :foreign_key => "friend_id" 

def self.get_friends(user) 
    @facebook ||= Koala::Facebook::API.new(user.oauth_token) 
    @friends = @facebook.get_connection(user.fbid, "friends") 

    @friends.each do |friend| 

     if @friend = User.find_by_fbid(friend["id"]) 

     friendship = Friendship.find_or_create_by_user_id_and_friend_id!(user.id,   
         @friend.id) 

     end 
    end 
    end 

    def self.real_time_update!(payload) 
    RealtimeUpdate.new(payload).enqueue_updates! 
    end 

    class RealtimeUpdate < Struct.new(:payload) 


    def enqueue_updates! 
     remove_duplicate_ids.each do |entry| 
     if (user = User.find_by_uid(entry['uid']).try(:user)) 
      Resque.enqueue(Resque::Job::UpdateFacebookFriends, user.id, 
         :since=>entry['time']) 
     end 
     end 
    end 

    protected 

    def remove_duplicate_ids 
     payload['entry'].each_with_object({}) do |entry, hash| 
     hash[entry['uid']] ||= [] << entry 
     end.values.collect { |update_payloads| update_payloads.min { |entry1, entry2|  
     entry1['time']<=>entry2['time'] } } 
    end 


    end 

end 

Resque Job

class Resque::Job::UpdateFacebookFriends 

    @queue  = "facebook_friends" 

    def self.perform(uid, opts={}) 
    ::Timeout.timeout(1800) do 
     Friendship.get_friends!(User.find_by_fbid(uid)) 
    end 
    end 

end 

heureux de fournir toute autre information que je peux !!!

Merci d'avance!

+0

a été ma réponse heplful? –

Répondre

0

Assurez-vous que vous avez spécifié read_friendlists autorisation dans la configuration des rails:

provider :facebook, ENV['FACEBOOK_APP_ID'], ENV['FACEBOOK_APP_SECRET'], :scope => 'read_friendlists, friends_location' 

Et s'il vous plaît utiliser la fonction get_connections:

@facebook ||= Koala::Facebook::API.new user.oauth_token 
@friends = @facebook.get_connection user.fbid, :friends 
Questions connexes