2011-08-04 12 views
2

私はKenticoにページゲートを設定しようとしています。 Webパーツやモジュールの使用を検討する必要がありますか?私は両者で遊んだので、それらを使って基本的な開発を行う方法を知っています。facebook page gate in kentico

答えて

1

これまでにページテンプレートを使用して行っています。実際には非常に簡単です。 Facebookには、(Facebookにアプリを設定している場合)返信するbase64エンコードされたパラメータ 'signed_request'があります。それをデコードし、jsonを使用して「好き」の変数を探す必要があります。これは真または偽でなければなりません。

私はページに2つのCMSEditableRegionを持っています.1つはユーザーがページに似ていて、もう1つはユーザーが(まだ)気に入らなかった場合です。

 protected CMSEditableRegion likedRegion; 
     protected CMSEditableRegion notLikedRegion; 

     protected bool ValidateSignedRequest(string signed_request) 
     { 

      try 
      { 
       string payload = signed_request.Split('.')[1]; 
       UTF8Encoding encoding = new UTF8Encoding(); 
       var decodedJson = payload.Replace("=", string.Empty).Replace('-', '+').Replace('_', '/'); 
       var base64JsonArray = Convert.FromBase64String(decodedJson.PadRight(decodedJson.Length + (4 - decodedJson.Length % 4) % 4, '=')); 
       var json = encoding.GetString(base64JsonArray); 

       return json.IndexOf("\"liked\":true") != -1; 

      } 
      catch (Exception ex) 
      { 
       return false; 
      } 
     } 

     private bool parsePageSignedRequest() 
     { 
      if (Request["signed_request"] != null) 
      { 
       return ValidateSignedRequest(Request["signed_request"]); 

      } 
      return false; 
     } 

     protected void Page_Load(object sender, EventArgs e) 
     { 
      if (CMS.CMSHelper.CMSContext.ViewMode == CMS.PortalEngine.ViewModeEnum.LiveSite) 
      { 
       if (parsePageSignedRequest()) 
       { 
        notLikedRegion.Visible = false; 
        likedRegion.Visible = true; 
       } 
       else 
       { 
        notLikedRegion.Visible = true; 
        likedRegion.Visible = false; 
       } 
      }    
     }