accessing to google api in unity - unity3d

I want to access to google's APIs in Unity3d. I want to use google plus API in my Unity3d application to have sharing feature in the app.
Please help me if you worked with google's APIs in Unity3d.
Thanks.

There is a detailed explanation of how to do this here for C#/.NET. You will at most have to make only minor changes to the code to make it work with Mono. One thing to note, is that you will have to include this code in order to tell Mono to allow the requests to the API. (source)
using System;
using System.Net;
using System.Net.Security;
using System.Security.Cryptography.X509Certificates;
public class UnsafeSecurityPolicy {
public static bool Validator(
object sender,
X509Certificate certificate,
X509Chain chain,
SslPolicyErrors policyErrors) {
//*** Just accept and move on...
Debug.Log ("Validation successful!");
return true;
}
public static void Instate() {
ServicePointManager.ServerCertificateValidationCallback = Validator;
}
}
You will have to call Instate before you start using the API.

Related

Google app engine Endpoints, Objectify Register

I start google app engine with endpoints, I use objectify for persistence and I have an little question.(I hope !)
All my apiMethod start like it :
#ApiMethod(path = "getAccount", httpMethod = HttpMethod.GET)
public Account getAccount(#Named("idPlayer") long idPlayer) {
ObjectifyLoader.loadEntity();
ObjectifyLoader.loadEntity(); is just a method like it
public static void loadEntity(){
ObjectifyService.register(Account.class);
ObjectifyService.register(WeaponsAccount.class);
}
I got the impression that I register my class et each call to the api.
A tips for load only one time?
Thanks you for reading.
Fabiitch
You want to use a ServletContextListener. Check out this App Engine oage for an example.

Facebook OAuth stopped working suddenly

I noticed yesterday that my Facebook login for my website has stopped working.
This has been working great for the last 2 months, as far as I am aware I have not changed anything. I have tried everything I can on links such as: - as well as many more...
ASP.NET MVC5 OWIN Facebook authentication suddenly not working
I have noticed that the Stack Overflow Facebook auth has also stopped working.
Has anyone else noticed this and found any solution? It's worth noting I am using azure app services to host. But this issue is also found when I am using localhost.
My current setup looks like this...
in Startup.Auth.cs
var facebookOptions = new Microsoft.Owin.Security.Facebook.FacebookAuthenticationOptions()
{
AppId = "xxxxxxxxxxxxx",
AppSecret = "xxxxxxxxxxxx"
};
facebookOptions.Scope.Add("email");
app.UseFacebookAuthentication(facebookOptions);
In the following method, loginInfo is null every time.
[AllowAnonymous]
public async Task<ActionResult> ExternalLoginCallback(string returnUrl)
{
var loginInfo = await AuthenticationManager.GetExternalLoginInfoAsync();
if (loginInfo == null)
{
return RedirectToAction("Login");
}
I also added a session "WAKEUP" from a different post suggestion, fb auth failed once before and this fixed the issue this time, but it has come back.
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public ActionResult ExternalLogin(string provider, string returnUrl)
{
Session["WAKEUP"] = "NOW!";
// Request a redirect to the external login provider
return new ChallengeResult(provider, Url.Action("ExternalLoginCallback", "Account", new { ReturnUrl = returnUrl }));
}
As RockSheep explained. Facebook dropped the support vor API v2.2. You need to update your OWIN nuget packages.
You can find the issue on github (from the Katanaproject).
Ensure to activate pre releases in your nuget manager, than you are able to update the nuget packages to version v3.1.0-rc1. But beware: After the update, you need to test your login carefully (maybe you also have other authentication providers like Microsoft or Google, you should test them as well).
Technical
The Api changed the version number to v2.8 and the return value from the API is now in JSON-Format and no longer escaped in the URI. The 'old' OWIN packages can not handle this changes.
[Oauth Access Token] Format - The response format of
https://www.facebook.com/v2.3/oauth/access_token returned when you
exchange a code for an access_token now return valid JSON instead of
being URL encoded. The new format of this response is {"access_token":
{TOKEN}, "token_type":{TYPE}, "expires_in":{TIME}}. We made this
update to be compliant with section 5.1 of RFC 6749.
Here you can find the code-changes on GitHub for further informations and better understanding.
A lot of people started having trouble after yesterday. This is due to Facebook dropping support for v2.2 of their API. For some reason their system still redirects auth calls that don't use a version number to the 2.2 API. A quickfix is to ensure that the API version gets sent with the API call.
Starting at v2.3 Facebook also started returning JSON objects. So make sure to change that in the code as well.
I had the same issue, found solution here Fix facebook oauth 2017
Basically, you need to extend HttpClientHandler and decode JSON response instead of body
Here is a solution for those who are using scribe java.
public Token extract(String response)
{
Preconditions.checkEmptyString(response, "Response body is incorrect. Can't extract a token from an empty string");
JSONObject obj = new JSONObject(response);
return new Token(obj.get("access_token").toString(), EMPTY_SECRET, response);
}
Create a new class and set the extractor to JSON.
import org.scribe.builder.api.DefaultApi20;
import org.scribe.extractors.AccessTokenExtractor;
import org.scribe.extractors.JsonTokenExtractor;
import org.scribe.model.OAuthConfig;
public class FaceFmApi extends DefaultApi20 {
#Override
public String getAccessTokenEndpoint()
{
return "https://graph.facebook.com/oauth/access_token";
}
#Override
public AccessTokenExtractor getAccessTokenExtractor()
{
return new JsonTokenExtractor();
}
#Override
public String getAuthorizationUrl(OAuthConfig config) {
return null;
}
}
and inject your newly created class as below. Then getAccessToken() will work as expected.
public OAuthService getService() {
return new ServiceBuilder().provider(FaceFmApi.class)
.apiKey(config.getApiKey()).apiSecret(config.getApiSecret())
.callback(config.getCallback()).build();
}

Return 401 in a Web API Facebook Login

community, I was following an example of how to make a service that offers Facebook login on my web api but I can not make it work.
The link for the example. I did try the another example and still not working.
Well, in my AccountController I have the method GetExternalLogin and in the line:
if (!User.Identity.IsAuthenticated)
{
return new ChallengeResult(provider, this);
}
The method return the error 401. I don't work with OWIN before, but I want in the method call the Facebook Login API. And this don't call the Facebook login page, just return 401.
I copied all the sample code and not worked. What should I do?
The code in the ChallengeResult:
public class ChallengeResult : IHttpActionResult
{
public string LoginProvider { get; set; }
public HttpRequestMessage Request { get; set; }
public ChallengeResult(string loginProvider, ApiController controller)
{
LoginProvider = loginProvider;
Request = controller.Request;
}
public Task<HttpResponseMessage> ExecuteAsync(CancellationToken cancellationToken)
{
Request.GetOwinContext().Authentication.Challenge(LoginProvider);
HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.Unauthorized);
response.RequestMessage = Request;
return Task.FromResult(response);
}
}
I don't know any thing about OWIN, sorry. I will learn
Returning 401 (Unauthorized) is correct. This is what the External Login provider (Facebook in your case) use to know that have to display the login page.
As I see, you are already following a tutorial, but maybe this one can help you to understand the authentication and authorization process with external providers. This tutorial explains how to authorize with Google and Facebook, but in your case you can skip the Google parts.
I hope this helps.
Hit the same problem, burned the same neurons. After losing enough brain mass, I found the cause in my case: In the query string, I have written Facebook with a small f. When I changed it to a capital F, it started working.
Hope this helps.

Download image via webservice

Hi there
I have an IPhone application that is downloading data from a .net webservice.
The webservice uses the following:-
[System.Web.Script.Services.ScriptService]
public class DownloadHelperService : System.Web.Services.WebService {
public DownloadHelperService () {
//Uncomment the following line if using designed components
//InitializeComponent();
}
[WebMethod]
[System.Web.Script.Services.ScriptMethod(UseHttpGet = false)]
public byte[] Download(string fileName)
{
return Facade.IOHelper.DownloadFileFromServer(fileName);
}
}
This method will in theory download an image file to the client. The issue is that this is being downloaded as Json which is inefficient.
If I take off the scriptmethod attribute and class level script then I cannot make the call from my IPhone application as it says that my method calls require the scriptmethod attributes.
If anyone can advise on the best route to download images from a webservice to an IPhone application using objective-c I would be eternally grateful
Make the webservice return you the image url and then download the image from the url.

GXT: How to bring the login page when session expires

I am developing a web application using GXT, Hibernate, mysql etc. There is a login page for the application. Actually I am getting problem to set the login page when the session expires. We can set the timeout in the web.xml file but in that case we can't redirect to login page.Can you tell me how to achieve that.
You can not do a server side redirect because the application is entirely AJAX. What you can do is use the GWT Timer class and for every one of your RPC calls check/reset the timer. If the "session" expires then you do a redirect to the login page via a History token. This was the easiest way for me
Some other reading:
http://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/b9eab8daaa993c83/d0192d356045e061?pli=1
http://gwt-ext.com/forum/viewtopic.php?f=9&t=1682
I have used the concept of throwing an exception in the server side when the session expires and then tried to catch the exception in the client side. I don't know whether there is any better way to do that.
On the server side, you can check if the session is expired and if so, throw a custom exception.
On the client side, on every async call you do a check for this known situation and react to it. You can create an abstract class for AsyncCallback that you will subclass for each GWT RPC call:
public abstract class SessionExpiredAwareAsyncCallback<T> implements AsyncCallback<T> {
#Override
public void onSuccess(T returnObject) {
doOnSuccess(returnObject);
}
#Override
public void onFailure(Throwable exception) {
if (exception instanceof SessionExpiredException) {
goToLoginPage();
} else {
doOnFailure(exception);
}
}
public abstract doOnSuccess(T returnObject);
public abstract doOnFailure(Throwable exception);
}
You can use gwteventservice to fire an event from the server to the client.