Anyone here has used roboPod of roboVM for google sign in.i'm appreciate if you concern my post and answer to me. I don't know how to using this library and i've ever knew programming ios
https://github.com/robovm/robovm-robopods/tree/master/google-signin
Use RoboPods for Google SignIn by MobiVM's RoboVM Fork
OAuth client ID
& URL scheme
for your project from hereAdd your URL scheme
inside info.plist.xml
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>CFBundleURLName</key>
<string>com.googleusercontent.apps.1234567890-qweasdzxcqweasdzxc321456</string>
<key>CFBundleURLSchemes</key>
<array>
<string>com.googleusercontent.apps.1234567890-qweasdzxcqweasdzxc321456</string>
</array>
</dict>
<dict>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>${bundle.id}</key>
<string>${bundle.id}</string>
<key>CFBundleURLSchemes</key>
<array>
<string>${bundle.id}</string>
</array>
</dict>
</array>
Inside iOS module
GIDSignIn.getSharedInstance().setUiDelegate(new GIDSignInUIDelegateAdapter() {
private UIViewController libgdxViewController;
@Override
public void willDispatch(GIDSignIn signIn, NSError error) {
}
@Override
public void presentViewController(GIDSignIn signIn, UIViewController viewController) {
libgdxViewController = UIApplication.getSharedApplication().getKeyWindow().getRootViewController();
libgdxViewController.presentViewController(viewController, true, null);
UIApplication.getSharedApplication().getKeyWindow().setRootViewController(viewController);
}
@Override
public void dismissViewController(GIDSignIn signIn, UIViewController viewController) {
viewController.dismissViewController(true, null);
}
});
Set Sign-In callback :
GIDSignIn.getSharedInstance().setDelegate(GIDSignInDelegate v);
SignIn
GIDSignIn.getSharedInstance().setClientID(OAUTHCLIENTID); // set OAuth client ID
GIDSignIn.getSharedInstance().signIn();
Override openURL
method inside IOSLauncher
class:
@Override
public boolean openURL(UIApplication application, NSURL url, String sourceApplication, NSObject annotation) {
boolean canRespond = GIDSignIn.getSharedInstance().handleURL(url, sourceApplication, (NSPropertyList)annotation);
if (canRespond) {
return true;
} else {
return false;
}
}
Use interfacing to access platform specific APIs.
EDIT Test Code:
Inside core module :
SignInServiceApi.java
public interface SignInServiceApi {
void signIn();
void signOut();
}
MyGDXTest.java
public class MyGDXTest extends ApplicationAdapter {
private SignInServiceApi signInServiceApi;
private Stage stage;
private Label name;
private Label emailId;
private Skin skin;
public Main(SignInServiceApi signInServiceApi){
this.signInServiceApi=signInServiceApi;
}
@Override
public void create () {
stage=new Stage(new StretchViewport(400f,640f));
skin = new Skin(Gdx.files.internal("skin/uiskin.json"));
Table root = new Table();
root.setFillParent(true);
stage.addActor(root);
root.defaults().pad(10f);
name=new Label("Name :", skin);
emailId=new Label("Email :", skin);
TextButton signIn=new TextButton("Sign In", skin);
signIn.addListener(new ClickListener(){
@Override
public void clicked(InputEvent event, float x, float y) {
signInServiceApi.signIn();
super.clicked(event, x, y);
}
});
TextButton disconnect=new TextButton("Sign Out", skin);
disconnect.addListener(new ClickListener(){
@Override
public void clicked(InputEvent event, float x, float y) {
signInServiceApi.signOut();
super.clicked(event, x, y);
}
});
root.add(name).row();
root.add(emailId).row();
root.add(signIn).width(150).height(50f).row();
root.add(disconnect).width(150).height(50f);
Gdx.input.setInputProcessor(stage);
}
public void updateData(String name,String emilId){
this.name.setText("Name : "+name.toUpperCase());
this.emailId.setText("Email : "+emilId.toUpperCase());
}
@Override
public void render () {
Gdx.gl.glClearColor(1, 0, 0, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
stage.act();
stage.draw();
}
@Override
public void dispose () {
stage.dispose();
skin.dispose();
}
@Override
public void resize(int width, int height) {
stage.getViewport().update(width,height);
}
}
Inside ios module :
IOSLauncher.java
public class IOSLauncher extends IOSApplication.Delegate implements GIDSignInDelegate {
private MyGDXTest main;
@Override
protected IOSApplication createApplication() {
IOSApplicationConfiguration config = new IOSApplicationConfiguration();
return new IOSApplication(main=new MyGDXTest(new IOSSignIn(this)), config);
}
public static void main(String[] argv) {
NSAutoreleasePool pool = new NSAutoreleasePool();
UIApplication.main(argv, null, IOSLauncher.class);
pool.close();
}
@Override
public boolean openURL(UIApplication app, NSURL url, UIApplicationOpenURLOptions options) {
return GIDSignIn.getSharedInstance().handleURL(url,options.getSourceApplication(),(NSPropertyList)options.getAnnotation());
}
@Override
public void didSignIn(GIDSignIn signIn, GIDGoogleUser user, NSError error) {
if (error==null){
GIDProfileData gidProfileData=user.getProfile();
main.updateData(gidProfileData.getName(),gidProfileData.getEmail());
}
Gdx.app.log("GIDSignInDelegate:didSignIn", "Error is "+error);
}
@Override
public void didDisconnect(GIDSignIn signIn, GIDGoogleUser user, NSError error) {
if (user==null) {
main.updateData("", "");
}
Gdx.app.log("GIDSignInDelegate:didDisconnect", "Error is "+error);
}
}
IOSSignIn
// ios implementation class of SignInServiceApi
public class IOSSignIn implements SignInServiceApi {
private final static String CLIENT_ID = "1111-xxxxxxxxxxxxxxxxxxxx.apps.googleusercontent.com";
public IOSSignIn(IOSLauncher app){
GIDSignIn.getSharedInstance().setDelegate(app);
GIDSignIn.getSharedInstance().setUiDelegate(new GIDSignInUIDelegateAdapter() {
@Override
public void willDispatch(GIDSignIn signIn, NSError error) { }
@Override
public void presentViewController(GIDSignIn signIn, UIViewController viewController) {
UIViewController libgdxViewController = UIApplication.getSharedApplication().getKeyWindow().getRootViewController();
libgdxViewController.presentViewController(viewController, true, null);
}
@Override
public void dismissViewController(GIDSignIn signIn, UIViewController viewController) {
viewController.dismissViewController(true, null);
}
});
}
@Override
public void signIn() {
GIDSignIn.getSharedInstance().setClientID(CLIENT_ID);
GIDSignIn.getSharedInstance().signIn();
}
@Override
public void signOut() {
GIDSignIn.getSharedInstance().signOut();
GIDSignIn.getSharedInstance().disconnect();
}
}
I've tested again with my another google account, working fine for me on my iPhone.