protected override void _pushEventGetContactsFinished(Provider provider, SocialPageData<UserProfile> contactsPage, string payload)
        {
            if (SoomlaProfile.IsProviderNativelyImplemented(provider)) return;
            List<JSONObject> profiles = new List<JSONObject>();
            foreach (var profile in contactsPage.PageData) {
                profiles.Add(profile.toJSONObject());
            }
            JSONObject contacts = new JSONObject(profiles.ToArray());

            soomlaProfile_PushEventGetContactsFinished(provider.ToString(), contacts.ToString(), payload, contactsPage.HasMore);
        }
        protected override void _pushEventGetContactsFinished(Provider provider, SocialPageData<UserProfile> contactsPage, string payload)
        {
            if (SoomlaProfile.IsProviderNativelyImplemented(provider)) return;
            List<JSONObject> profiles = new List<JSONObject>();
            foreach (var profile in contactsPage.PageData) {
                profiles.Add(profile.toJSONObject());
            }
            JSONObject contacts = new JSONObject(profiles.ToArray());

            AndroidJNI.PushLocalFrame(100);
            using(AndroidJavaClass jniSoomlaProfile = new AndroidJavaClass("com.soomla.profile.unity.ProfileEventHandler")) {
                ProfileJNIHandler.CallStaticVoid(jniSoomlaProfile, "pushEventGetContactsFinished",
                                                 provider.ToString(), contacts.ToString(), payload, contactsPage.HasMore);
            }
            AndroidJNI.PopLocalFrame(IntPtr.Zero);
        }
			protected virtual void _pushEventGetFeedFinished(Provider provider, SocialPageData<String> feedPage, string payload) {}
			protected virtual void _pushEventGetContactsFinished(Provider provider, SocialPageData<UserProfile> contactsPage, string payload){}
		/// <summary>
		/// Handles an <c>onGetScoresFinished</c> event
		/// </summary>
		/// <param name="message">
		/// Will contain a numeric representation of <c>Provider</c>,
		/// and payload</param>
		public void onGetScoresFinished(String message) {
			SoomlaUtils.LogDebug(TAG, "SOOMLA/UNITY onGetScoresFinished");

			JSONObject eventJson = new JSONObject(message);

			Provider provider = Provider.fromInt ((int)eventJson["provider"].n);
			Leaderboard owner = new Leaderboard(eventJson["leaderboard"]);

			bool hasMore = eventJson["hasMore"].b;

			JSONObject payloadJSON = new JSONObject(eventJson ["payload"].str);

			JSONObject scoresArray = eventJson ["scores"];
			List<Score> scores = new List<Score>();
			foreach (JSONObject scoreJson in scoresArray.list) {
				scores.Add(new Score(scoreJson));
			}

			SocialPageData<Score> data = new SocialPageData<Score>();
			data.PageData = scores;
			data.PageNumber = 0;
			data.HasMore = hasMore;

			ProfileEvents.OnGetScoresFinished(new GetScoresFinishedEvent(provider, owner, data, ProfilePayload.GetUserPayload(payloadJSON)));
		}
		/// <summary>
		/// Handles an <c>onGetLeaderboardsFinished</c> event
		/// </summary>
		/// <param name="message">
		/// Will contain a numeric representation of <c>Provider</c>,
		/// and payload</param>
		public void onGetLeaderboardsFinished(String message) {
			SoomlaUtils.LogDebug(TAG, "SOOMLA/UNITY onGetLeaderboardsFinished");

			JSONObject eventJson = new JSONObject(message);

			Provider provider = Provider.fromInt ((int)eventJson["provider"].n);


			JSONObject payloadJSON = new JSONObject(eventJson ["payload"].str);

			JSONObject leaderboardsArray = eventJson ["leaderboards"];
			List<Leaderboard> leaderboards = new List<Leaderboard>();
			foreach (JSONObject leaderboardJson in leaderboardsArray.list) {
				leaderboards.Add(new Leaderboard(leaderboardJson));
			}

			SocialPageData<Leaderboard> data = new SocialPageData<Leaderboard>();
			data.PageData = leaderboards;
			data.PageNumber = 0;
			data.HasMore = false;

			ProfileEvents.OnGetLeaderboardsFinished(new GetLeaderboardsFinishedEvent(provider, data, ProfilePayload.GetUserPayload(payloadJSON)));
		}
		/// <summary>
		/// Handles an <c>onGetFeedFinished</c> event
		/// </summary>
		/// <param name="message">
		/// Will contain a numeric representation of <c>Provider</c>,
		/// json array of feeds</param>
		public void onGetFeedFinished(String message)
		{
			SoomlaUtils.LogDebug(TAG, "SOOMLA/UNITY onGetFeedFinished");

			JSONObject eventJson = new JSONObject(message);
			Provider provider = Provider.fromInt ((int)eventJson["provider"].n);
			JSONObject feedsJson = eventJson ["feeds"];
			List<String> feeds = new List<String>();
			foreach (JSONObject feedVal in feedsJson.list) {
				//iterate "feed" keys
				feeds.Add(feedVal.str);
			}

			bool hasMore = eventJson["hasMore"].b;
			
			JSONObject payloadJSON = new JSONObject(eventJson ["payload"].str);
			SocialPageData<String> result = new SocialPageData<String>();
			result.PageData = feeds;
			result.PageNumber = 0;
			result.HasMore = hasMore;
			ProfileEvents.OnGetFeedFinished (provider, result);
			//ProfileEvents.OnGetFeedFinished (new GetFeedFinishedEvent(provider, result));
		}
		/// <summary>
		/// Handles an <c>onGetContactsFinished</c> event
		/// </summary>
		/// <param name="message">
		/// Will contain a numeric representation of <c>Provider</c>, 
		/// JSON array of <c>UserProfile</c>s and payload</param>
		public void onGetContactsFinished(String message)
		{
			SoomlaUtils.LogDebug(TAG, "SOOMLA/UNITY onGetContactsFinished");

			JSONObject eventJson = new JSONObject(message);
			
			Provider provider = Provider.fromInt ((int)eventJson["provider"].n);

			bool hasMore = eventJson["hasMore"].b;

			JSONObject payloadJSON = new JSONObject(eventJson ["payload"].str);

			JSONObject userProfilesArray = eventJson ["contacts"];
			List<UserProfile> userProfiles = new List<UserProfile>();
			foreach (JSONObject userProfileJson in userProfilesArray.list) {
				userProfiles.Add(new UserProfile(userProfileJson));
			}

			SocialPageData<UserProfile> data = new SocialPageData<UserProfile>();
			data.PageData = userProfiles;
			data.PageNumber = 0;
			data.HasMore = hasMore;
				                
			ProfileEvents.OnGetContactsFinished(provider, data, ProfilePayload.GetUserPayload(payloadJSON));
			//ProfileEvents.OnGetContactsFinished(new GetContactsFinishedEvent(provider, data, ProfilePayload.GetUserPayload(payloadJSON)) );
		}
		public GetScoresFinishedEvent(Provider provider, Leaderboard from, SocialPageData<Score> scores, string payload)
			: base(provider, payload)
		{
			this.From = from;
			this.Scores = scores;
		}
        /// <summary>
        /// See docs in <see cref="SoomlaProfile.GetContacts"/>
        /// </summary>
        /// <param name="pageNumber">The contacts' page number to get</param>
        /// <param name="success">Callback function that is called if the contacts were fetched successfully.</param>
        /// <param name="fail">Callback function that is called if fetching contacts failed.</param>
        public override void GetContacts(int pageNumber, ContactsSuccess success, ContactsFailed fail)
        {
            FB.API ("/me/friends?fields=id,name,picture,email,first_name,last_name&limit=" + DEFAULT_CONTACTS_PAGE_SIZE + "&offset=" + DEFAULT_CONTACTS_PAGE_SIZE * pageNumber,
                    Facebook.HttpMethod.GET,
                    (FBResult result) => {
                        if (result.Error != null) {
                            SoomlaUtils.LogDebug(TAG, "GetContactsCallback[result.Error]: "+result.Error);
                            fail(result.Error);
                         }
                        else {
                            SoomlaUtils.LogDebug(TAG, "GetContactsCallback[result.Text]: "+result.Text);
                            SoomlaUtils.LogDebug(TAG, "GetContactsCallback[result.Texture]: "+result.Texture);
                            JSONObject jsonContacts = new JSONObject(result.Text);

                            SocialPageData<UserProfile> resultData = new SocialPageData<UserProfile>();
                            resultData.PageData = UserProfilesFromFBJsonObjs(jsonContacts["data"].list);
                            resultData.PageNumber = pageNumber;

                            JSONObject paging = jsonContacts["paging"];
                            if (paging != null) {
                                resultData.HasMore = (paging["next"] != null);
                            }

                            success(resultData);
                        }
                    });
        }
		protected override void _pushEventGetFeedFinished (Provider provider, SocialPageData<String> feedPage, string payload) {
			if (SoomlaProfile.IsProviderNativelyImplemented(provider)) return;
			List<JSONObject> feeds = new List<JSONObject>();
			foreach (var feed in feedPage.PageData) {
				feeds.Add(JSONObject.StringObject(feed));
			}
			JSONObject feedJson = new JSONObject(feeds.ToArray());

			AndroidJNI.PushLocalFrame(100);
			using (AndroidJavaClass jniSoomlaProfile = new AndroidJavaClass("com.soomla.profile.unity.ProfileEventHandler")) {
				ProfileJNIHandler.CallStaticVoid(jniSoomlaProfile, "pushEventGetFeedFinished", 
				                                 provider.ToString(), feedJson.ToString(), payload, feedPage.HasMore);
			}
			AndroidJNI.PopLocalFrame(IntPtr.Zero);
		}
		protected override void _pushEventGetFeedFinished(Provider provider ,SocialPageData<String> feedPage, string payload) {
			if (SoomlaProfile.IsProviderNativelyImplemented(provider)) return;
			List<JSONObject> feeds = new List<JSONObject>();
			foreach (var feed in feedPage.PageData) {
				feeds.Add(JSONObject.StringObject(feed));
			}
			JSONObject jsonFeeds = new JSONObject(feeds.ToArray());
			soomlaProfile_PushEventGetFeedFinished(provider.ToString(), jsonFeeds.ToString(), payload, feedPage.HasMore);
		}
		public GetLeaderboardsFinishedEvent(Provider provider, SocialPageData<Leaderboard> leaderboards, string payload)
			: base(provider, payload) {
			this.Leaderboards = leaderboards;
		}
Exemple #14
0
        public SocialPageData Execute(string pageUri)
        {
            SessionAwareCoreServiceClient client = null;
            SocialPageData socialPageData        = new SocialPageData();

            try
            {
                client = Client.GetCoreService();

                string liveTargetUri = Configuration.GetConfigString("livetargeturi");
                string liveUrl       = Configuration.GetConfigString("liveurl");

                PageData            pageData = (PageData)client.Read(pageUri, new ReadOptions());
                PublishLocationInfo pubInfo  = (PublishLocationInfo)pageData.LocationInfo;

                socialPageData.Title       = pageData.Title;
                socialPageData.Uri         = pageUri;
                socialPageData.Url         = liveUrl + pubInfo.PublishLocationUrl;
                socialPageData.IsPublished = client.IsPublished(pageUri, liveTargetUri, true);
                socialPageData.UseShortUrl = bool.Parse(Configuration.GetConfigString("shorturl"));

                string shortUrl = string.Empty;

                if (socialPageData.UseShortUrl)
                {
                    ApplicationData appData = client.ReadApplicationData(pageUri, SHORT_URL_APP_ID);

                    if (appData != null)
                    {
                        Byte[] data = appData.Data;
                        shortUrl = Encoding.Unicode.GetString(data);
                    }

                    if (shortUrl.Equals(string.Empty))
                    {
                        Bitly  service = new Bitly(socialPageData.Url);
                        string shorter = service.ShortenUrl(service.UrlToShorten, service.BitlyLogin, service.BitlyAPIKey);
                        shortUrl = Bitly.ParseXmlResponse(shorter, false);

                        Byte[] byteData = Encoding.Unicode.GetBytes(shortUrl);
                        appData = new ApplicationData
                        {
                            ApplicationId = SHORT_URL_APP_ID,
                            Data          = byteData,
                            TypeId        = shortUrl.GetType().ToString()
                        };

                        client.SaveApplicationData(pageUri, new[] { appData });
                    }
                }

                socialPageData.ShortUrl = shortUrl;
            }
            catch (Exception ex)
            {
                socialPageData.HasError  = true;
                socialPageData.ErrorInfo = ex;
            }
            finally
            {
                if (client != null)
                {
                    if (client.State == CommunicationState.Faulted)
                    {
                        client.Abort();
                    }
                    else
                    {
                        client.Close();
                    }
                }
            }

            return(socialPageData);
        }
        /// <summary>
		/// See docs in <see cref="SoomlaProfile.GetContacts"/>
		/// </summary>
		/// <param name="fromStart">Should we reset pagination or request the next page</param>
		/// <param name="success">Callback function that is called if the contacts were fetched successfully.</param>
		/// <param name="fail">Callback function that is called if fetching contacts failed.</param>
		public override void GetContacts(bool fromStart, ContactsSuccess success, ContactsFailed fail) {
			checkPermission("user_friends", ()=> {
				int pageNumber;
				if (fromStart || this.lastPageNumber == 0) {
					pageNumber = 1;
				} else {
					pageNumber = this.lastPageNumber + 1;
				}
				
				this.lastPageNumber = 0;


				FB.API ("/me/friends?fields=id,name,picture,email,first_name,last_name&limit=" + DEFAULT_CONTACTS_PAGE_SIZE + "&offset=" + DEFAULT_CONTACTS_PAGE_SIZE * (pageNumber - 1),
				        HttpMethod.GET,
				        (IGraphResult result) => {
					if (result.Error != null) {
						SoomlaUtils.LogDebug(TAG, "GetContactsCallback[result.Error]: "+result.Error);
						fail(result.Error);
					}
					else {
						SoomlaUtils.LogDebug(TAG, "GetContactsCallback[result.Text]: "+result.RawResult);
						SoomlaUtils.LogDebug(TAG, "GetContactsCallback[result.Texture]: "+result.Texture);
						JSONObject jsonContacts = new JSONObject(result.RawResult);
						
						SocialPageData<UserProfile> resultData = new SocialPageData<UserProfile>(); 
						resultData.PageData = UserProfilesFromFBJsonObjs(jsonContacts["data"].list);
                        resultData.PageNumber = pageNumber;
                        
                        this.lastPageNumber = pageNumber;
                        
                        JSONObject paging = jsonContacts["paging"];
                        if (paging != null) {
                            resultData.HasMore = (paging["next"] != null);
                        }
                        
                        success(resultData);
                    }
                });
			}, (string errorMessage)=>{
				fail(errorMessage);
            });
        }
		public GetFeedFinishedEvent(Provider provider, SocialPageData<String>  feedPosts) : base(provider)
        {
            this.Posts = feedPosts;
        }
		public override void GetFeed(bool fromStart, FeedSuccess success, FeedFailed fail) {
			checkPermission("user_posts", () => {
				int pageNumber;
				if (fromStart || this.lastPageNumber == 0) {
					pageNumber = 1;
				} else {
					pageNumber = this.lastPageNumber + 1;
				}
				
				this.lastPageNumber = 0;

				FB.API("/me/feed?limit=" + DEFAULT_FEED_PAGE_SIZE + "&offset=" + DEFAULT_FEED_PAGE_SIZE * (pageNumber - 1),
				        HttpMethod.GET,
				        (IGraphResult result) => {
					if (result.Error != null) {
						SoomlaUtils.LogDebug(TAG, "GetFeedCallback[result.Error]: " + result.Error);
						fail(result.Error);
					}
					else {
						SoomlaUtils.LogDebug(TAG, "GetFeedCallback[result.Text]: " + result.RawResult);
						SoomlaUtils.LogDebug(TAG, "GetFeedCallback[result.Texture]: "+result.Texture);
						JSONObject jsonFeed = new JSONObject(result.RawResult);
						
						SocialPageData<String> resultData = new SocialPageData<String>(); 
						resultData.PageData = StoriesFromFBJsonObjs(jsonFeed["data"].list);
						resultData.PageNumber = pageNumber;
						
						this.lastPageNumber = pageNumber;
						
						JSONObject paging = jsonFeed["paging"];
						if (paging != null) {
							resultData.HasMore = (paging["next"] != null);
						}
						
						success(resultData);
					}
				});
			},
			(string errorMessage) => {
				fail(errorMessage);
			});
		}
		public GetContactsFinishedEvent(Provider provider, SocialPageData<UserProfile> contacts, string payLoad) : base(provider)
        {
            this.Contacts = contacts;
			this.payLoad = payLoad;
        }