2

我正在尝试将我的应用程序的状态提交到 Window 的 live,用户启动应用程序,被要求授予我的应用程序执行此操作的权限,一旦被授予我有一个实时会话对象,我可以更新他们的状态。这完美地工作。但是,如果用户关闭应用程序然后再次打开它,他们会再次被要求批准我的应用程序执行此操作。每次。

现在实时文档说您可以获得一个刷新令牌(我这样做)来防止这种情况,问题是访问令牌和刷新令牌都在 LiveConnectSession 中烘焙,所以当我的应用程序关闭时,这个对象被破坏并且用户是要求再次授予应用程序权限。

所以我想知道的是,是否有人知道在应用程序启动时重新创建该对象的方法(如果我存储了令牌和刷新令牌)或保存对象 onDestroy()..

Iterable<String> scopes = Arrays.asList("wl.signin", "wl.share", "wl.offline_access" );
this.auth.login(this, scopes, this);

public void onAuthComplete(LiveStatus status, LiveConnectSession session, Object userState) {
    if(status == LiveStatus.CONNECTED) {
        Log.d("", "Signed in.");
        client = new LiveConnectClient(session);
4

1 回答 1

2

使用 Windows Phone 时遇到了同样的问题。我尝试序列化会话,但由于会话类没有默认构造函数,这不起作用。

编辑:在整整两天寻找我所犯的错误之后,我终于发现我做错了什么:我必须使用 wl.offline_access 范围来完成这项工作!

现在一切又变得有趣了。不敢相信这是问题所在。测试和工作。好的!

正如我所看到的,您正在使用离线范围,所以这对您来说不是问题。

但是我发现了更多:有两种方法可以连接到 Live(在 C# 中,我不知道这些方法在 Java 中是如何调用的):

  • 使用 LiveConnectClient.LoginAsync(GUI 自带)
  • 使用 LiveConnectClient.InitializeAsync (这是 UI 少,在后台连接)

因此,如果您的应用程序已经连接,请使用第二个来访问新的会话对象。AFAIK,此对象有效期为一年,之后,用户必须重新登录。但不要引用我的话。

请让我知道这是否适合您。

于 2012-11-03T18:46:35.367 回答