facebook_app 0.0.19 → 0.0.20
Sign up to get free protection for your applications and to get access to all the features.
- data/app/assets/javascripts/javascript_sdk.js.coffee +24 -0
- data/app/assets/stylesheets/admin.sass +4 -1
- data/app/controllers/facebook_app/facebook_app_controller.rb +0 -12
- data/app/controllers/facebook_app/facebook_sdk_controller.rb +6 -0
- data/app/controllers/facebook_app/trackings_controller.rb +11 -0
- data/app/helpers/facebook_app/facebook_sdk_helper.rb +63 -0
- data/app/models/facebook_app/conversion.rb +0 -4
- data/app/models/facebook_app/conversion_summary.rb +6 -4
- data/app/views/facebook_app/admin/_conversion_stage.html.slim +3 -3
- data/app/views/facebook_app/admin/_funnel.html.slim +6 -0
- data/app/views/facebook_app/admin/_spamalytics.html.slim +9 -4
- data/app/views/facebook_app/admin/show.html.slim +2 -1
- data/app/views/facebook_app/facebook_sdk/channel.html +1 -0
- data/config/initializers/quiet_asset_pipeline_log.rb +10 -0
- data/config/routes.rb +4 -0
- data/lib/facebook_app/tracking_helper.rb +16 -0
- data/lib/facebook_app/version.rb +1 -1
- data/lib/facebook_app.rb +1 -0
- metadata +11 -3
@@ -0,0 +1,24 @@
|
|
1
|
+
track = (conversion_state) ->
|
2
|
+
$.post('/trackings', {conversion_state: conversion_state})
|
3
|
+
|
4
|
+
window.removeAppPermissions = () ->
|
5
|
+
FB.api("/me/permissions", "delete", {}, () -> alert("Removed App Permission From Facebook"))
|
6
|
+
|
7
|
+
window.facebookLogin = (redirectUrl, permissions) ->
|
8
|
+
FB.getLoginStatus (status) ->
|
9
|
+
if status.authResponse
|
10
|
+
console.log "User already logged in"
|
11
|
+
window.location = redirectUrl
|
12
|
+
else
|
13
|
+
console.log "User isn't logged in. Trying to log in now"
|
14
|
+
FB.login (response) ->
|
15
|
+
# track("see_permissions_dialogue")
|
16
|
+
if response.authResponse # user has logged in
|
17
|
+
track("accept_permissions")
|
18
|
+
console.log "User accepted permissions"
|
19
|
+
window.location = redirectUrl
|
20
|
+
else
|
21
|
+
track("deny_permissions")
|
22
|
+
console.log "User denied permissions"
|
23
|
+
, {scope: permissions}
|
24
|
+
|
@@ -32,18 +32,6 @@ module FacebookApp
|
|
32
32
|
end
|
33
33
|
end
|
34
34
|
|
35
|
-
def begin_tracking
|
36
|
-
conversion = Conversion.find_or_create(cookies[:conversion_id],params[:marketing_mode])
|
37
|
-
cookies[:conversion_id] = conversion.id
|
38
|
-
end
|
39
|
-
|
40
|
-
def track_conversion(conversion_state)
|
41
|
-
Rails.logger.debug "Attempting to track #{conversion_state}"
|
42
|
-
Conversion.track(cookies[:conversion_id], conversion_state)
|
43
|
-
rescue
|
44
|
-
|
45
|
-
end
|
46
|
-
|
47
35
|
# loads the graph from the users point of view
|
48
36
|
def load_graph
|
49
37
|
@graph ||= Koala::Facebook::API.new(session[:at])
|
@@ -0,0 +1,63 @@
|
|
1
|
+
module FacebookApp
|
2
|
+
module FacebookSdkHelper
|
3
|
+
|
4
|
+
def add_facebook_sdk
|
5
|
+
%Q{
|
6
|
+
<div id="fb-root"></div>
|
7
|
+
<script>
|
8
|
+
window.fbAsyncInit = function() {
|
9
|
+
FB.init({
|
10
|
+
appId : '#{FacebookApp::FacebookCredentials.app_id}',
|
11
|
+
channelURL : '#{facebook_app.facebook_channel_url}',
|
12
|
+
status : true, // check login status
|
13
|
+
cookie : true, // enable cookies to allow the server to access the session
|
14
|
+
oauth : true, // enable OAuth 2.0
|
15
|
+
xfbml : true // parse XFBML
|
16
|
+
});
|
17
|
+
// Additional initialization code here
|
18
|
+
};
|
19
|
+
|
20
|
+
// Load the SDK Asynchronously
|
21
|
+
(function(d){
|
22
|
+
var js, id = 'facebook-jssdk'; if (d.getElementById(id)) {return;}
|
23
|
+
js = d.createElement('script'); js.id = id; js.async = true;
|
24
|
+
js.src = "//connect.facebook.net/en_US/all.js";
|
25
|
+
d.getElementsByTagName('head')[0].appendChild(js);
|
26
|
+
}(document));
|
27
|
+
</script>
|
28
|
+
}.html_safe
|
29
|
+
end
|
30
|
+
|
31
|
+
def uid
|
32
|
+
javascript_tag("FB.getUserID()")
|
33
|
+
end
|
34
|
+
|
35
|
+
# Configurable[:facebook_permissions]
|
36
|
+
def facebook_login(text, permissions, log_in_url)
|
37
|
+
link_to(text, "#", :onclick => "facebookLogin('#{permissions}', '#{log_in_url}'").html_safe
|
38
|
+
end
|
39
|
+
|
40
|
+
def uninstall_facebook_app_button
|
41
|
+
button_to_function("Uninstall This Facebook App", "removeAppPermissions()")
|
42
|
+
end
|
43
|
+
|
44
|
+
def facebook_logout_button
|
45
|
+
button_to_function("Log out of App", "FB.logout()")
|
46
|
+
end
|
47
|
+
|
48
|
+
def comments_box
|
49
|
+
%Q{
|
50
|
+
<script>(function(d, s, id) {
|
51
|
+
var js, fjs = d.getElementsByTagName(s)[0];
|
52
|
+
if (d.getElementById(id)) {return;}
|
53
|
+
js = d.createElement(s); js.id = id;
|
54
|
+
js.src = "//connect.facebook.net/en_GB/all.js#xfbml=1&appId=225198020866871";
|
55
|
+
fjs.parentNode.insertBefore(js, fjs);
|
56
|
+
}(document, 'script', 'facebook-jssdk'));</script>
|
57
|
+
|
58
|
+
<div class="fb-comments" data-href="http://apps.facebook.com/myprofilereport/" data-num-posts="20" data-width="700"></div>
|
59
|
+
}.html_safe
|
60
|
+
end
|
61
|
+
|
62
|
+
end
|
63
|
+
end
|
@@ -16,10 +16,6 @@ module FacebookApp
|
|
16
16
|
transition :permissions_dialogue => :denied_permissions
|
17
17
|
end
|
18
18
|
|
19
|
-
event :deny_extended_permissions do
|
20
|
-
transition [:deny_permissions, :permissions_dialogue] => :denied_extended_permissions
|
21
|
-
end
|
22
|
-
|
23
19
|
event :accept_permissions do
|
24
20
|
transition [:denied_permissions, :denied_extended_permissions, :permissions_dialogue] => :installed
|
25
21
|
end
|
@@ -11,6 +11,12 @@ module FacebookApp
|
|
11
11
|
"Cannot compute yet"
|
12
12
|
end
|
13
13
|
|
14
|
+
def funnel(from_state, to_state, marketing_type=:all)
|
15
|
+
state_count(from_state, marketing_type)/ state_count(to_state, marketing_type)
|
16
|
+
rescue ZeroDivisionError
|
17
|
+
"Cannot compute yet"
|
18
|
+
end
|
19
|
+
|
14
20
|
def splash_page_state_count(marketing_mode)
|
15
21
|
state_count(:splash_page, marketing_mode).to_s
|
16
22
|
end
|
@@ -27,10 +33,6 @@ module FacebookApp
|
|
27
33
|
state_count(:denied_permissions, marketing_mode).to_s
|
28
34
|
end
|
29
35
|
|
30
|
-
def denied_extended_state_count(marketing_mode)
|
31
|
-
state_count(:denied_extended_permissions, marketing_mode).to_s
|
32
|
-
end
|
33
|
-
|
34
36
|
def infographic_state_count(marketing_mode)
|
35
37
|
state_count(:generated_infographic, marketing_mode).to_s
|
36
38
|
end
|
@@ -1,9 +1,9 @@
|
|
1
|
+
h4 Basic Numbers
|
2
|
+
hr
|
1
3
|
ul
|
2
4
|
li = "Advertising: " + conversion_summary.send(state, :advertising)
|
3
5
|
li = "Viral: " + conversion_summary.send(state, :viral)
|
4
6
|
li = "Unknown or testing: " + conversion_summary.send(state, nil)
|
5
|
-
li = "
|
6
|
-
li = "Ratio of all advertised visitors that reach this stage: " + conversion_summary.percentage_of_total(state, :advertising)
|
7
|
-
li = "Ratio of all viral visitors that reach this stage: " + conversion_summary.percentage_of_total(state, :viral)
|
7
|
+
li = "Total visitors: " + conversion_summary.send(state, :all)
|
8
8
|
li.virality= "Virality: " + number_to_percentage(conversion_summary.virality_coefficient(state))
|
9
9
|
|
@@ -0,0 +1,6 @@
|
|
1
|
+
h4.title Funnel Information
|
2
|
+
hr
|
3
|
+
p Percentage of all #{from_stage.to_s.humanize} users reaching this stage: #{conversion_summary.funnel(from_stage, to_stage)}
|
4
|
+
p Percentage of viral #{from_stage.to_s.humanize} users reaching this stage: #{conversion_summary.funnel(from_stage, to_stage, :viral)}
|
5
|
+
p Percentage of advertised #{from_stage.to_s.humanize} users reaching this stage: #{conversion_summary.funnel(from_stage, to_stage, :advertising)}
|
6
|
+
hr
|
@@ -1,18 +1,23 @@
|
|
1
1
|
h1 Spamalytics
|
2
2
|
h2 Unique users who reached splash page
|
3
3
|
= render :partial => 'conversion_stage', :locals => {:state => :splash_page_state_count, :conversion_summary => conversion_summary }
|
4
|
+
|
4
5
|
h2 Unique users who saw permissions dialogue for this app
|
5
6
|
= render :partial => 'conversion_stage', :locals => {:state => :permissions_state_count, :conversion_summary => conversion_summary }
|
7
|
+
= render :partial => "funnel", :locals => {:from_stage => :splash_page, :to_stage => :permission_dialogue, :conversion_summary => conversion_summary}
|
8
|
+
|
6
9
|
h2 Unique users who installed this facebook app (accepted permissions)
|
7
10
|
= render :partial => 'conversion_stage', :locals => {:state => :installed_state_count, :conversion_summary => conversion_summary }
|
8
|
-
|
11
|
+
= render :partial => "funnel", :locals => {:from_stage => :permissions_dialogue, :to_stage => :accept_infographics, :conversion_summary => conversion_summary}
|
12
|
+
|
13
|
+
h2 Unique users who denied permissions for this app
|
9
14
|
p Note that these users are all redirected to Identified.com, so it's not a complete loss
|
10
15
|
= render :partial => 'conversion_stage', :locals => {:state => :denied_state_count, :conversion_summary => conversion_summary }
|
11
|
-
h2 Unique users who denied extended permissions for this app (publish rights etc)
|
12
|
-
p Note that these users are all redirected to Identified.com, so it's not a complete loss
|
13
|
-
= render :partial => 'conversion_stage', :locals => {:state => :denied_extended_state_count, :conversion_summary => conversion_summary }
|
14
16
|
h2 Unique users who sent an infographic
|
15
17
|
= render :partial => 'conversion_stage', :locals => {:state => :infographic_state_count, :conversion_summary => conversion_summary }
|
18
|
+
= render :partial => "funnel", :locals => {:from_stage => :accept_permissions, :to_stage => :generate_infographic, :conversion_summary => conversion_summary}
|
19
|
+
|
16
20
|
h2 Unique users who installed Identified app after coming through here
|
17
21
|
p Installed the Identified Facebook app (success)
|
18
22
|
= render :partial => 'conversion_stage', :locals => {:state => :signed_up_identified_state_count, :conversion_summary => conversion_summary }
|
23
|
+
= render :partial => "funnel", :locals => {:from_stage => :generate_infographic, :to_stage => :signed_up_identified, :conversion_summary => conversion_summary}
|
@@ -1,10 +1,11 @@
|
|
1
|
+
= add_facebook_sdk
|
1
2
|
#spamalytics
|
2
3
|
= render :partial => 'spamalytics', :locals => {:conversion_summary => @conversion_summary}
|
3
4
|
h2 Testing
|
4
5
|
p Delete all stored conversion data. Useful for testing conversions are working.
|
5
6
|
= button_to "Delete Data", facebook_app.clear_conversion_data_path, :confirm => "Are you sure you want to permanently delete all conversion data?"
|
6
7
|
p Remove app permission. Useful for checking if permissions dialogue shows at right time. Will log you in if you are logged out.
|
7
|
-
=
|
8
|
+
= uninstall_facebook_app_button
|
8
9
|
p Register Achievements With Facebook(must be done with each new app)
|
9
10
|
= button_to "Register Achivements", facebook_app.register_with_fb_achievement_path(1)
|
10
11
|
|
@@ -0,0 +1 @@
|
|
1
|
+
<script src="//connect.facebook.net/en_US/all.js"></script>
|
@@ -0,0 +1,10 @@
|
|
1
|
+
# The asset pipeline logger is messy and destroys the ability to debug
|
2
|
+
|
3
|
+
Rails.application.assets.logger = Logger.new('/dev/null')
|
4
|
+
Rails::Rack::Logger.class_eval do
|
5
|
+
def before_dispatch_with_quiet_assets(env)
|
6
|
+
before_dispatch_without_quiet_assets(env) unless env['PATH_INFO'].index("/assets/") == 0
|
7
|
+
end
|
8
|
+
alias_method_chain :before_dispatch, :quiet_assets
|
9
|
+
end
|
10
|
+
|
data/config/routes.rb
CHANGED
@@ -7,6 +7,10 @@ FacebookApp::Engine.routes.draw do
|
|
7
7
|
end
|
8
8
|
end
|
9
9
|
|
10
|
+
get "/channel" => "facebook_sdk#channel", :as => :facebook_channel
|
11
|
+
|
12
|
+
post "/trackings" => "trackings#create", :as => :trackings
|
13
|
+
|
10
14
|
match "/oauth_callback" => "oauth#create", :as => :oauth_callback
|
11
15
|
match "/denied" => "oauth#denied", :as => :denied
|
12
16
|
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module FacebookApp
|
2
|
+
module TrackingHelper
|
3
|
+
|
4
|
+
def begin_tracking
|
5
|
+
conversion = Conversion.find_or_create(cookies[:conversion_id],params[:marketing_mode])
|
6
|
+
cookies[:conversion_id] = conversion.id
|
7
|
+
end
|
8
|
+
|
9
|
+
def track_conversion(conversion_state)
|
10
|
+
Rails.logger.debug "Attempting to track #{conversion_state}"
|
11
|
+
Conversion.track(cookies[:conversion_id], conversion_state)
|
12
|
+
rescue
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
16
|
+
end
|
data/lib/facebook_app/version.rb
CHANGED
data/lib/facebook_app.rb
CHANGED
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: facebook_app
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.0.
|
5
|
+
version: 0.0.20
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Jack Kinsella
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2011-11-
|
13
|
+
date: 2011-11-08 00:00:00 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: rails
|
@@ -118,6 +118,7 @@ files:
|
|
118
118
|
- app/assets/images/shared/ajax-loader.gif
|
119
119
|
- app/assets/images/single_pixel.png
|
120
120
|
- app/assets/javascripts/facebook_app.js
|
121
|
+
- app/assets/javascripts/javascript_sdk.js.coffee
|
121
122
|
- app/assets/javascripts/pages.coffee.erb
|
122
123
|
- app/assets/stylesheets/admin.sass
|
123
124
|
- app/assets/stylesheets/configurables.sass
|
@@ -128,9 +129,12 @@ files:
|
|
128
129
|
- app/controllers/facebook_app/admin_controller.rb
|
129
130
|
- app/controllers/facebook_app/external_trackings_controller.rb
|
130
131
|
- app/controllers/facebook_app/facebook_app_controller.rb
|
132
|
+
- app/controllers/facebook_app/facebook_sdk_controller.rb
|
131
133
|
- app/controllers/facebook_app/oauth_controller.rb
|
132
134
|
- app/controllers/facebook_app/pages_controller.rb
|
135
|
+
- app/controllers/facebook_app/trackings_controller.rb
|
133
136
|
- app/helpers/facebook_app/application_helper.rb
|
137
|
+
- app/helpers/facebook_app/facebook_sdk_helper.rb
|
134
138
|
- app/mailers/.gitkeep
|
135
139
|
- app/models/.gitkeep
|
136
140
|
- app/models/facebook_app/conversion.rb
|
@@ -139,19 +143,23 @@ files:
|
|
139
143
|
- app/models/facebook_app/infographic_server_communicator.rb
|
140
144
|
- app/views/facebook_app/achievements/show.html.slim
|
141
145
|
- app/views/facebook_app/admin/_conversion_stage.html.slim
|
146
|
+
- app/views/facebook_app/admin/_funnel.html.slim
|
142
147
|
- app/views/facebook_app/admin/_spamalytics.html.slim
|
143
148
|
- app/views/facebook_app/admin/new_fb_credentials.html.slim
|
144
149
|
- app/views/facebook_app/admin/show.html.slim
|
145
150
|
- app/views/facebook_app/external_trackings/test.html.slim
|
151
|
+
- app/views/facebook_app/facebook_sdk/channel.html
|
146
152
|
- app/views/facebook_app/pages/privacy_policy.html.slim
|
147
153
|
- app/views/facebook_app/pages/terms_of_service.html.slim
|
148
154
|
- app/views/layouts/facebook_app.html.slim
|
155
|
+
- config/initializers/quiet_asset_pipeline_log.rb
|
149
156
|
- config/routes.rb
|
150
157
|
- db/migrate/20111024214949_add_facebook_app.rb
|
151
158
|
- facebook_app.gemspec
|
152
159
|
- lib/facebook_app.rb
|
153
160
|
- lib/facebook_app/engine.rb
|
154
161
|
- lib/facebook_app/recipes.rb
|
162
|
+
- lib/facebook_app/tracking_helper.rb
|
155
163
|
- lib/facebook_app/version.rb
|
156
164
|
- lib/generators/facebook_app/install_generator.rb
|
157
165
|
- lib/generators/facebook_app/templates/configurable.yml
|
@@ -182,7 +190,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
182
190
|
requirements: []
|
183
191
|
|
184
192
|
rubyforge_project: facebook_app
|
185
|
-
rubygems_version: 1.8.
|
193
|
+
rubygems_version: 1.8.11
|
186
194
|
signing_key:
|
187
195
|
specification_version: 3
|
188
196
|
summary: Base Facebook for rapid development of future Facebook applications
|