通过 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

  1. 关注安装instruction
  2. here
  3. 为您的项目获取 OAuth client ID & URL scheme
  4. 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>
    
  5. 内部 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。

编辑 测试代码:

内部核心模块:

  1. SignInServiceApi.java

    public interface SignInServiceApi {
        void signIn();
        void signOut();
    }
    
  2. 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 模块内部:

  1. 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);
        }
    }
    
  2. 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.

上工作正常