Единственный вопрос, который имеет кучу ответов. Удостоверьтесь в путеводителе, которого я хотел бы, когда я пытался с этим справиться, чтобы он работал в 10:30 ночью в день истечения срока ... FB делает некоторые странные вещи с приложениями для холста, и хорошо, вас предупреждают. Если вы все еще здесь, и у вас есть приложение Rails, которое появится за Facebook Canvas, вам понадобится:
Gemfile:
gem "rack-facebook-signed-request", :git => 'git://github.com/cmer/rack-facebook-signed-request.git'
config / facebook.yml
facebook:
key: "123123123123"
secret: "123123123123123123secret12312"
config / application.rb
config.middleware.use Rack::Facebook::SignedRequest, app_id: "123123123123", secret: "123123123123123123secret12312", inject_facebook: false
config / initializers / omniauth.rb
OmniAuth.config.logger = Rails.logger
SERVICES = YAML.load(File.open("#{::Rails.root}/config/oauth.yml").read)
Rails.application.config.middleware.use OmniAuth::Builder do
provider :facebook, SERVICES['facebook']['key'], SERVICES['facebook']['secret'], iframe: true
end
application_controller.rb
before_filter :add_xframe
def add_xframe
headers['X-Frame-Options'] = 'GOFORIT'
end
Вам нужен контроллер для вызова из настроек холста Facebook, я использовал /canvas/
и сделал маршрут для основного SiteController
для этого приложения:
class SiteController < ApplicationController
def index
@user = User.new
end
def canvas
redirect_to '/auth/failure' if request.params['error'] == 'access_denied'
url = params['code'] ? "/auth/facebook?signed_request=#{params['signed_request']}&state=canvas" : "/login"
redirect_to url
end
def login
end
end
login.html.erb
<% content_for :javascript do %>
var oauth_url = 'https://www.facebook.com/dialog/oauth/';
oauth_url += '?client_id=471466299609256';
oauth_url += '&redirect_uri=' + encodeURIComponent('https://apps.facebook.com/wellbeingtracker/');
oauth_url += '&scope=email,status_update,publish_stream';
console.log(oauth_url);
top.location.href = oauth_url;
<% end %>
Источники
Если код является процедурным, то обычный псевдокод, вероятно, прост (некоторые примеры есть у Википедии).
Объектно-ориентированный псевдокод может оказаться более сложным. Рассмотрим:
Я считаю, что причина, по которой существуют разные цели, связана с размером скалярных типов. Я думаю, что это также влияет на способ обработки COM-объектов.
У меня есть ситуация, когда у меня есть сторонняя библиотека .NET, которая, если используется в 64-разрядном приложении, программа терпит неудачу при вызове библиотеки, поэтому я должен ограничиться только 32-разрядным режимом.
-121--1740775-Сначала позвольте мне быть тупым и сказать, что я не знаю всю историю здесь, я собираюсь ответить тем, что я думаю, я знаю. Я с радостью удалю или изменю свой ответ, если кто-то скажет мне, где я ошибаюсь.
Как я понимаю, эта настройка является флагом, который говорит «сборка должна выполняться в этом типе архитектуры». Это для настроек x86 и x64. Настройка MSIL/.NET просто говорит: «Мне все равно, я могу запустить либо, так что выберите оптимальный или доступный».
Например, вы можете выполнять вызовы для Win32 функций API через P/Invoke, в этом случае сборка не будет работать на x64 и вы должны отметить ее как x86.
Итак, если я правильно понимаю, вот как три флага запускают сборку (заметьте, это главная сборка, сборка программы, которая диктует это, а не каждая отдельная сборка для себя) на разных платформах:
Setting x86 x64 <-- Platform (CPU/OS)
MSIL/.NET 32-bit 64-bit
x86 32-bit 32-bit
x64 N/A (*) 64-bit
N/A для сборки x64 на x86 означает, что сборка не будет загружена, и вы получите исключение, если попытаетесь.
Также обратите внимание, что конфликтующие настройки с использованием x86 и x64 приведут к аварийному завершению программы в тот или иной момент. Если для главной сборки задано значение x86, она будет выполняться как 32-разрядный процесс как в 32-разрядной, так и в 64-разрядной операционной системе, и любые попытки загрузки сборок, помеченных как x64, завершатся неудачей. Аналогично, если для главной сборки установлено значение x64, она будет работать только в 64-разрядной операционной системе, и любая попытка загрузки набора сборок x86 завершится неудачей.
Основная исполняемая сборка MSIL будет работать как 32-разрядная в 32-разрядной операционной системе (например, если он был установлен на x86, с указанной выше точкой отказа,) и как 64-разрядная в 64-разрядной операционной системе (например, если она была установлена на x64, с указанной выше точкой отказа).
Очевидно Как правило, вы хотите использовать MSIL настройки, если вы не вызываете сборки, помеченные как нечто конкретное, и если вы не делаете P/Invoke, который не переносится на 32-разрядные и 64-разрядные (Я понятия не имею, работает ли это, если P/Invoke to win-api функции будут сопоставлены с правильно битовым DLL или нет.)
Поскольку ссылки являются указателями, а указатели хранятся как собственный х-битный адрес на двух платформах, в зависимости от количества ссылок, у вас может быть дело против просто перейти с MSIL. Вы должны, однако,убедитесь, что это проблема, прежде чем вносить изменения в настройки.
Во-первых, установка Platform Target на x86 в вашем .exe проекте очень полезна, когда вы отлаживаете свой проект на 64-битная версия Windows. Отладчик VS2005 / 8 не поддерживает Edit + Continue в 64-битном коде.
Выбор x86 в вашей сборке релиза - это то, что вам следует сделать, если ваша программа зависит от компонента, который работает только в 32-битном коде. Это не редкость, существует масса компонентов COM, которые никогда не были и никогда не будут перенесены на 64-битный неуправляемый код. Классическим примером является ядро базы данных Microsoft Jet.
Выбор x64 очень необычен, здесь не так много неуправляемого кода, который доступен только в 64-битной версии. Примечательно то, что вы получите предупреждения при сборке сборки. Есть несколько сборок .NET framework, которые содержат неуправляемый код; в каталоге c: \ windows \ microsoft.net доступны только их 32-разрядные версии.Вы можете спокойно игнорировать эти предупреждения, 64-битные версии фактически установлены в GAC.
Один недостаток при выборе x64 заключается в том, что компилятор C # 3.0 выдаст двоичный файл, который просит Windows создать поток запуска с размером стека 4 мегабайта вместо 1 мегабайта по умолчанию. Это несколько оправдано, 64-битный код требует больше стека для хранения указателей и адресов возврата.
Наконец, в Windows SDK есть инструмент Corflags.exe для переключения разрядности сборки после ее сборки. Параметр / 32BIT + эквивалентен установке Platform Target на x86. Использование / 32BIT - гарантирует, что сборка будет работать в 64-битном режиме в 64-битной операционной системе. Изменить размер стека по умолчанию можно с помощью инструмента Editbin.exe.
Этот флаг важен для EXE-файлов. Он решает, будете ли вы запускать 32-битный или 64-битный процесс. Если вы используете «родные» библиотеки DLL из вашего кода .NET, вам необходимо следовать архитектуре этих DLL.
Параметр «Любой процессор» в EXE-файлах будет выбирать x64, если он доступен.
Я считаю, что причина, по которой существуют разные цели, связана с размером скалярных типов. Я думаю, это также влияет на то, как обрабатываются COM-объекты.
У меня есть ситуация, когда у меня есть сторонняя библиотека .NET, которая при использовании в 64-битном приложении дает сбой при вызове библиотеки, поэтому я должен ограничиться только 32-битным режимом.