/// <summary> /// Handles rich push. That is, it gives you a WebBrowser object filled with rich push HTML content. /// </summary> /// <param name="callback"></param> public static void handleRichPush(Action <WebBrowser, Exception> callback) { //richPush = true; //richPushId = "5113c5e4e4b0533d1f2d5374"; if (richPush && richPushId != null) { JObject userJson = new JObject(); NetmeraUser user = NetmeraUser.getCurrentUser(); if (user != null) { userJson.Add("name", user.getName()); userJson.Add("surname", user.getSurname()); } getRichPushContent((pushContent, ex) => { resetRichPush(); if (ex != null) { if (callback != null) { callback(null, ex); } } else { if (pushContent.Value <String>("message") == "OK") { pushContent = pushContent.Value <JObject>("result"); String pushData = pushContent.Value <String>(NetmeraConstants.Netmera_Rich_Push_Html); JObject clientJson = pushContent.Value <JObject>(NetmeraConstants.Netmera_Rich_Push_Client_Json); String userString = userJson.ToString(); String clientString = clientJson.ToString(); Deployment.Current.Dispatcher.BeginInvoke(() => { WebBrowser webBrowser = new WebBrowser(); webBrowser.IsScriptEnabled = true; webBrowser.LoadCompleted += new LoadCompletedEventHandler((s, e) => { Deployment.Current.Dispatcher.BeginInvoke(() => { String html = webBrowser.SaveToString(); clientString = Regex.Replace(clientString, "\r", ""); clientString = Regex.Replace(clientString, "\n", ""); userString = Regex.Replace(userString, "\r", ""); userString = Regex.Replace(userString, "\n", ""); String jscript = "var customJson='" + clientString + "'; var currentUser='******'; customJson=JSON.parse(customJson); currentUser=JSON.parse(currentUser); getClientParams(customJson,currentUser);"; try { webBrowser.InvokeScript("eval", jscript); if (callback != null) { callback(webBrowser, null); } } catch (Exception) { if (callback != null) { callback(null, new NetmeraException(NetmeraException.ErrorCode.EC_RICH_PUSH_JAVASCRIPT_ERROR, "Javascript error occured. Make sure that you put the proper Javascript code in your push message.")); } } }); }); webBrowser.NavigateToString(pushData); }); } else { if (callback != null) { callback(null, new NetmeraException(NetmeraException.ErrorCode.EC_RICH_PUSH_CONTENT_ERROR, "Rich push -HTML- content is not retrieved properly.")); } } } }); } else { if (callback != null) { callback(null, new NetmeraException(NetmeraException.ErrorCode.EC_RICH_PUSH_ID_EMPTY, "Rich push id is empty. Please check rich push data with the function 'NetmeraPushService.checkRichPush()..' and then 'NetmeraPushService.isRichPush()..")); } } }
/// <summary> /// Logs a user into the registered application with Facebook account with Facebook permissions. /// </summary> /// <param name="permissionArray">Permission array</param> /// <param name="callback">Method to be called when login operation finishes</param> public static void login(String[] permissionArray, Action <NetmeraUser, Exception> callback) { String securityToken = NetmeraClient.getSecurityToken(); if (securityToken != null && securityToken.Trim() != "") { Popup popup = new Popup(); LoginUserControl control = new LoginUserControl(); control.btnCancel.Click += new RoutedEventHandler((s, e) => { NetmeraUser user = null; user = NetmeraUser.getCurrentUser(); if (callback != null) { callback(user, null); } }); try { NetmeraUser.clearSocialSessions((logout, ex) => { if (logout && ex == null) { control.webBrowser.Loaded += new RoutedEventHandler((s, e) => { facebook.getFacebookLoginUri(permissionArray, (loginUri, ex1) => { if (loginUri != null && ex1 == null) { Deployment.Current.Dispatcher.BeginInvoke(() => { control.webBrowser.Navigate(loginUri); }); } else { if (callback != null) { callback(null, ex1); } } }); }); control.webBrowser.LoadCompleted += new LoadCompletedEventHandler((s, e) => { String ss = control.webBrowser.SaveToString(); facebook.getFacebookAccessToken(e.Uri, (accessToken, ex2) => { if (!String.IsNullOrEmpty(accessToken)) { Deployment.Current.Dispatcher.BeginInvoke(() => { popup.IsOpen = false; getFacebookUser((user, ex3) => { if (user != null && ex3 == null) { FacebookSession.save(facebook); } callback(user, ex3); }); }); } else if (ex2 != null) { Deployment.Current.Dispatcher.BeginInvoke(() => { popup.IsOpen = false; if (callback != null) { callback(null, ex2); } }); } }); }); Deployment.Current.Dispatcher.BeginInvoke(() => { popup.Child = control; popup.IsOpen = true; }); } else { if (callback != null) { callback(null, ex); } } }); } catch (Exception) { if (callback != null) { callback(null, new NetmeraException(NetmeraException.ErrorCode.EC_FB_ERROR, "Error occured while logging in facebook.")); } } } else { if (callback != null) { callback(null, new NetmeraException(NetmeraException.ErrorCode.EC_API_KEY_NOT_FOUND, "You didn't set your api key. Please use NetmeraClient.init(apiKey).")); } } }