我正在为Facebook构建一个Iframe画布应用程序。我没有使用Javascript SDK。
这是我正在使用的代码,除了Safari之外,它适用于所有浏览器。
protected FacebookApp app;
受保护的CanvasAuthorizer cauth;
Response.AddHeader(“p3p”,“CP = \”IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT \“”); app = new FacebookApp(); cauth = new CanvasAuthorizer(app); if(!cauth.IsAuthorized()) { myAuth auth = new myAuth(); myAuth.Authorize(app,Request,Response,perms); }
if (cauth.Authorize())
{
//在这里做我的应用程序 }
public class myAuth
{
public static void Authorize(FacebookApp fbApp, System.Web.HttpRequest request, System.Web.HttpResponse response, string perms)
{
Authorize(fbApp, request, response, perms, null);
}
public static void Authorize(FacebookApp fbApp, System.Web.HttpRequest request, System.Web.HttpResponse response, string perms, string redirectUrl)
{
Uri url = fbApp.GetLoginUrl();
NameValueCollection nvc = System.Web.HttpUtility.ParseQueryString(url.Query);
if (!string.IsNullOrEmpty(perms))
nvc.Add("req_perms", perms);
if (!string.IsNullOrEmpty(redirectUrl))
nvc["next"] = GetAppRelativeUrl(redirectUrl);
else if (request.QueryString.Count > 0)
nvc["next"] = GetAppRelativeUrl(request.Path.Replace(request.ApplicationPath, string.Empty).Replace(request.ApplicationPath.ToLower(), string.Empty) + "?" + request.QueryString);
else
nvc["next"] = GetAppRelativeUrl(request.Path.Replace(request.ApplicationPath, string.Empty).Replace(request.ApplicationPath.ToLower(), string.Empty));
UriBuilder ub = new UriBuilder(url);
ub.Query = nvc.ToString();
string content = CanvasUrlBuilder.GetCanvasRedirectHtml(ub.Uri);
response.ContentType = "text/html";
response.Write(content);
response.End();
}
public static string GetAppRelativeUrl(string url)
{
return CanvasSettings.Current.CanvasPageUrl.ToString();
}
}
我读到Safari不允许第三方cookie,我认为这就是问题所在。我的问题是,有一种方法可以使用SDK或我的选项来处理这个问题。
此致 安德斯·彼得森
答案 0 :(得分:0)
我在使用HTTP更改HTTP标头中发送的数据的情况时遇到了一些问题...请确保您正在进行的任何解析/比较都不区分大小写。
答案 1 :(得分:0)
答案 2 :(得分:0)
这里我遇到了同样的问题,但现在我得到了野生动物园的解决方案..
只需在web.config中更改验证模式
<system.web>
<pages enableViewState="true" validateRequest="false" />
<httpRuntime requestValidationMode="2.0"/>
<!--
Enable this code if you get still problem
<sessionState cookieless="true" regenerateExpiredSessionId="true" />-->