通过 RoboVM/RoboPod 登录 google
Login google by RoboVM/RoboPod
这里有人使用 roboVM 的 roboPod 作为 google 标志 in.i 如果您关心我的 post 并回复我,我将不胜感激。我不知道如何使用这个库,但我知道编程 ios
https://github.com/robovm/robovm-robopods/tree/master/google-signin
使用RoboPods for Google SignIn by MobiVM的RoboVM Fork
- 关注安装instruction
- 从 here
为您的项目获取 OAuth client ID
& URL scheme
在 info.plist.xml
中添加您的 URL scheme
<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>
内部 iOS 模块
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);
}
});
设置登录回调:
GIDSignIn.getSharedInstance().setDelegate(GIDSignInDelegate v);
登录
GIDSignIn.getSharedInstance().setClientID(OAUTHCLIENTID); // set OAuth client ID
GIDSignIn.getSharedInstance().signIn();
重写 IOSLauncher
中的 openURL
方法 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;
}
}
使用 interfacing 访问特定于平台的 API。
编辑 测试代码:
内部核心模块:
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);
}
}
ios 模块内部:
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 SignInServiceApi class 的实现
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();
}
}
我已经用我的另一个 google 帐户再次测试,在我的 iPhone.
上工作正常
这里有人使用 roboVM 的 roboPod 作为 google 标志 in.i 如果您关心我的 post 并回复我,我将不胜感激。我不知道如何使用这个库,但我知道编程 ios
https://github.com/robovm/robovm-robopods/tree/master/google-signin
使用RoboPods for Google SignIn by MobiVM的RoboVM Fork
- 关注安装instruction
- 从 here 为您的项目获取
在
中添加您的info.plist.xml
URL scheme
<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>
内部 iOS 模块
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); } });
设置登录回调:
GIDSignIn.getSharedInstance().setDelegate(GIDSignInDelegate v);
登录
GIDSignIn.getSharedInstance().setClientID(OAUTHCLIENTID); // set OAuth client ID GIDSignIn.getSharedInstance().signIn();
重写
IOSLauncher
中的openURL
方法 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; } }
OAuth client ID
& URL scheme
使用 interfacing 访问特定于平台的 API。
编辑 测试代码:
内部核心模块:
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); } }
ios 模块内部:
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 SignInServiceApi class 的实现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(); } }
我已经用我的另一个 google 帐户再次测试,在我的 iPhone.
上工作正常