2

アプリケーションからウィンドウのライブにステータスを送信しようとしています。ユーザーはアプリを起動し、アプリにこれを行うためのアクセス許可を与えるように求められます。許可されると、ライブセッションオブジェクトがあり、ステータスを更新できます。これは完全に機能します。ただし、ユーザーがアプリケーションを閉じてから再度開くと、このアクションについてアプリを承認するように再度求められます。毎回。

ライブドキュメントには、これを防ぐために更新トークンを取得できると記載されています(これは私が行います)。問題は、アクセストークンと更新トークンがすべて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を使用して同じ問題が発生しました。セッションをシリアル化しようとしましたが、セッションクラスにデフォルトのコンストラクターがないため、機能しません。

編集:私が犯した間違いを丸2日探した後、私はついに自分が間違っていることを発見しました:これを機能させるにはwl.offline_accessスコープを使用する必要があります!

今、すべてが再び楽しいです。これが問題だったなんて信じられない。テスト済みで動作しています。良い!

ご覧のとおり、オフラインスコープを使用しているので、問題はありません。

しかし、私はもっと知りました:Liveに接続する2つの方法があります(C#では、メソッドがJavaでどのように呼び出されるかわかりません):

  • LiveConnectClient.LoginAsync(GUIに付属)を使用する
  • LiveConnectClient.InitializeAsyncを使用します(UIが少なく、バックグラウンドで接続します)

したがって、アプリケーションがすでに接続されている場合は、2番目のアプリケーションを使用して新しいセッションオブジェクトにアクセスします。AFAIK、このオブジェクトは1年間有効です。その後、ユーザーは再度サインインする必要があります。しかし、それについて私を引用しないでください。

これでうまくいくかどうか教えてください。

于 2012-11-03T18:46:35.367 に答える