/// <summary>
        /// Subscribe page feed
        /// </summary>
        /// <param name="sourceInfoJson">source info has all the information of the page</param>
        /// <returns>Whether subscribed or not</returns>
        public override async Task <bool> Subscribe(string sourceInfoJson)
        {
            SourceInfoFB sourceInfo = JsonConvert.DeserializeObject <SourceInfoFB>(sourceInfoJson);
            Dictionary <string, string> queryParams = new Dictionary <string, string>();

            queryParams.Add(this.accessTokenParam, sourceInfo.AccessToken);

            SubscribeWebhookResponseFB response = await this.Client.PostRequestAsync <Dictionary <string, string>, SubscribeWebhookResponseFB>(sourceInfo.PageId + "/subscribed_apps", null, queryParams, new CancellationTokenSource().Token);

            if (response != null && response.Success == true)
            {
                return(true);
            }

            Trace.TraceError("Subscription failed for page id {0}", sourceInfo.PageId);
            throw new Exception("Internal Server Error");
        }
        public override async Task <bool> Unsubscribe(string sourceInfoJson)
        {
            SourceInfoFB sourceInfo = JsonConvert.DeserializeObject <SourceInfoFB>(sourceInfoJson);
            Dictionary <string, string> queryParams = new Dictionary <string, string>();

            queryParams.Add(this.accessTokenParam, sourceInfo.AccessToken);
            try
            {
                SubscribeWebhookResponseFB response = await this.Client.DeleteRequestAsync <SubscribeWebhookResponseFB>(sourceInfo.PageId + "/subscribed_apps", queryParams, new CancellationTokenSource().Token);

                if (response != null && response.Success == true)
                {
                    return(true);
                }
            }
            catch (Exception e)
            {
                Trace.TraceError($"Failed to unsubscribe. Exception occured: {e.Message}, {e.StackTrace}");
            }

            Trace.TraceError("UnSubscribe failed for page id {0}", sourceInfo.PageId);
            return(false);
        }