Steam Войти с помощью OpenID в Android

Я новичок в разработке Android. Мой проект состоит в том, чтобы сделать приложение с использованием Steam публичного API, но я не мог понять, как разрешить пользователю входить в систему с помощью учетной записи Steam.

В документации Steam по веб-API говорится, что я должен использовать openID, поэтому я много искал, чтобы найти пример реализации openID в приложении andorid, но это единственный пример, который я нашел, и он не работает, webView просто оказывается пустым.

я просто хочу, чтобы пользователь щелкнул по кнопке входа в систему, которая запускает веб-представление, где он может войти в систему, а затем получить свой Steam ID обратно.

так что мой вопрос

  1. Есть ли способ реализовать вход openID в Android?
  2. Если нет, то есть ли возможность разрешить пользователю вход в Steam?

1 ответ

Решение

Я думаю, что я нашел какой-то обходной путь, я думаю.

Steam OpenID может быть использован с URL-запросом, как это:

https://steamcommunity.com/openid/login?
openid.claimed_id=http://specs.openid.net/auth/2.0/identifier_select&
openid.identity=http://specs.openid.net/auth/2.0/identifier_select&
openid.mode=checkid_setup&
openid.ns=http://specs.openid.net/auth/2.0&
openid.realm=https://REALM_PARAM&
openid.return_to=https://REALM_PARAM/signin/

где REALM_PARAM - это веб-сайт, который будет отображаться на экране входа в систему. Кроме того, пользователь будет перенаправлен на этот веб-сайт после завершения аутентификации, он не должен фактически существовать. Все, что вам нужно было сделать после этого, это проанализировать новый URL для идентификатора пользователя.

Так что я использовал что-то вроде этого

public class LoginActivity extends ActionBarActivity {

    // The string will appear to the user in the login screen  
    // you can put your app's name
    final String REALM_PARAM = "YourAppName";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        final WebView webView = new WebView(this);
        webView.getSettings().setJavaScriptEnabled(true);

        final Activity activity = this;

        webView.setWebViewClient(new WebViewClient() {
            @Override
            public void onPageStarted(WebView view, String url,
                                      Bitmap favicon) {

                //checks the url being loaded
                setTitle(url);
                Uri Url = Uri.parse(url);

                if(Url.getAuthority().equals(REALM_PARAM.toLowerCase())){
                    // That means that authentication is finished and the url contains user's id.
                    webView.stopLoading();

                    // Extracts user id.
                    Uri userAccountUrl = Uri.parse(Url.getQueryParameter("openid.identity"));
                    String userId = userAccountUrl.getLastPathSegment();

                    // Do whatever you want with the user's steam id 

                });
                setContentView(webView);

                // Constructing openid url request
                String url = "https://steamcommunity.com/openid/login?" +
                        "openid.claimed_id=http://specs.openid.net/auth/2.0/identifier_select&" +
                        "openid.identity=http://specs.openid.net/auth/2.0/identifier_select&" +
                        "openid.mode=checkid_setup&" +
                        "openid.ns=http://specs.openid.net/auth/2.0&" +
                        "openid.realm=https://" + REALM_PARAM + "&" +
                        "openid.return_to=https://" + REALM_PARAM + "/signin/";

                webView.loadUrl(url);

            }
        }

Используйте чистый HTML в теге формы

Таким образом, вы можете охватить устройства Android И все, что поддерживает HTML. Это обеспечивает вход в систему, как указано в официальной документации Steam.

    <form action="https://steamcommunity.com/openid/login" method="post">
        <input type="hidden" name="openid.identity"
               value="http://specs.openid.net/auth/2.0/identifier_select" />
        <input type="hidden" name="openid.claimed_id"
               value="http://specs.openid.net/auth/2.0/identifier_select" />
        <input type="hidden" name="openid.ns" value="http://specs.openid.net/auth/2.0" />
        <input type="hidden" name="openid.mode" value="checkid_setup" />
        <input type="hidden" name="openid.realm" value="https:\\yourOpenIdRealm.com" />
        <input type="hidden" name="openid.return_to" value="https:\\YourDomainUrlToReturnTo.com" />
        <Button type="submit">Log in through Steam</Button>
    </form>
  • Пользователь нажмет кнопку в этой форме на вашем сайте и будет перенаправлен на страницу входа в сообщество Steam.
  • Затем пользователь может войти в свою учетную запись Steam на страницах сообщества Steam.
  • С YourDomainUrlToReturnTo вы указываете, куда пользователь возвращается на ваш сайт после успешного входа в систему через Steam.
  • Steam предоставит Steam ID в объекте местоположения браузера.
  • С этим Steam ID вы можете получать информацию о пользователе через Steam Web API.

Я поправил код @LibBo. Было несколько синтаксических ошибок. Также обновленоActionBarActivity к AppCompatActivity.

public class SteamActivity extends AppCompatActivity {

    // The string will appear to the user in the login screen
    // you can put your app's name
    final String REALM_PARAM = "YourAppName";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_steam);


        final WebView webView = new WebView(this);
        webView.getSettings().setJavaScriptEnabled(true);

        final Activity activity = this;

        setContentView(webView);

        // Constructing openid url request
        String url = "https://steamcommunity.com/openid/login?" +
                "openid.claimed_id=http://specs.openid.net/auth/2.0/identifier_select&" +
                "openid.identity=http://specs.openid.net/auth/2.0/identifier_select&" +
                "openid.mode=checkid_setup&" +
                "openid.ns=http://specs.openid.net/auth/2.0&" +
                "openid.realm=https://" + REALM_PARAM + "&" +
                "openid.return_to=https://" + REALM_PARAM + "/signin/";

        webView.loadUrl(url);

        webView.setWebViewClient(new WebViewClient() {
            @Override
            public void onPageStarted(WebView view, String url,
                                      Bitmap favicon) {

                //checks the url being loaded
                setTitle(url);
                Uri Url = Uri.parse(url);

                if (Url.getAuthority().equals(REALM_PARAM.toLowerCase())) {
                    // That means that authentication is finished and the url contains user's id.
                    webView.stopLoading();

                    // Extracts user id.
                    Uri userAccountUrl = Uri.parse(Url.getQueryParameter("openid.identity"));
                    String userId = userAccountUrl.getLastPathSegment();

                    // Do whatever you want with the user's steam id

                }
            }
        });
    }
}
Другие вопросы по тегам