在android中使用openID登录steam
Posted
技术标签:
【中文标题】在android中使用openID登录steam【英文标题】:steam login using openID in android 【发布时间】:2015-07-04 14:51:47 【问题描述】:我是 android 开发的新手。我的项目是使用 Steam 公共 API 制作应用程序,但我不知道如何允许用户使用 Steam 帐户登录。
Steam 的 web API 文档声明我应该使用 openID,所以我搜索了很多以找到一个在 Andorid 应用程序中实现 openID 的示例,但 this 是我找到的唯一示例并且它不起作用,webView 只是转动空白。
我只想让用户点击一个登录按钮,该按钮会触发一个 webView,用户可以在其中登录,然后取回他的 Steam ID。
所以我的问题是
-
有没有办法在android中实现openID登录?
如果没有,是否有允许用户登录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 是将出现在登录屏幕上的网站,并且用户将在身份验证完成后被重定向到该网站,它不必实际存在。 之后您所要做的就是解析用户 ID 的新 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);
【讨论】:
节省了我的一天,先生!你应该得到金牌。【参考方案2】:在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 获取用户信息。
【讨论】:
【参考方案3】:我更正了@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
);
【讨论】:
以上是关于在android中使用openID登录steam的主要内容,如果未能解决你的问题,请参考以下文章