在android中使用openID登录steam

时间:2015-04-26 04:58:50

标签: android openid steam

我刚接触android开发。我的项目是使用steam public API创建一个应用程序,但我无法弄清楚如何允许用户使用steam帐户登录。

Steam的Web API文档声明我应该使用openID,所以我搜索了很多以找到在andorid应用程序中实现openID的示例,但this是我发现的唯一示例,它不起作用,webView结果是空白。

我只是希望用户点击登录按钮,该按钮会触发用户可以登录的webView,然后返回他的蒸汽ID。

所以我的问题是

  1. 有没有办法在android中实现openID登录?
  2. 如果没有,无论如何都允许用户登录Steam?

3 个答案:

答案 0 :(得分:13)

我想我发现了某种解决方法。

steam openid可以与url请求一起使用,如下所示:

var layersByName = {};
function loadTOCLayer(layerName) {
  var tl = new ol.layer.Tile({
    extent: [-20037508.34, -20037508.34, 20037508.34, 20037508.34],
    source: new ol.source.TileWMS( /** @type {olx.source.TileWMSOptions} */ ({
      url: 'http://172.16.1.58:8080/geoserver/KBJNL/gwc/service/wms',
      params: {
        'LAYERS': layerName,
        'TILED': true
      },
      serverType: 'geoserver'
    }))
  });

  layersByName[layerName] = tl;

  map.addLayer(tl);
}


function removeTOCLayer(ss) {
  map.removeLayer(layersByName[ss]);
}

其中REALM_PARAM是将出现在登录屏幕上的网站,此外,用户将在身份验证完成后重定向到该网站,它不必实际存在。 之后您需要做的就是解析用户ID的新网址。

所以我使用了这样的东西

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/

答案 1 :(得分:1)

form 标签中使用纯HTML

这样,您可以覆盖Android设备以及所有讲HTML的内容。这样即可实现官方Steam documentation中概述的登录。

    <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将在浏览器的location object中提供Steam ID。
  • 使用该Steam ID,您可以通过Steam Web API获取用户信息。

答案 2 :(得分:0)

我更正了@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

                }
            }
        });
    }
}