私のアプリケーションには、サーバーにコンテンツを送信し、(必要に応じて) Facebook に投稿する機能があります。送信にはサービスを使用します(ストアデータにはsqliteを使用しています)。Facebookのセッションなどはサービスからできますか?コンテンツがDBに保存される時間と送信時間が異なる可能性があるため、必要です(接続が長時間失われ、接続が利用可能になった後に送信が開始される可能性がありますが、これではアプリケーションの送信サービスのみがアクティブになります時間)。この場合の解決策が見つかりません(そして、良い解決策があれば素晴らしいでしょう)。助けてください。
1 に答える
ユーザーは明示的にアプリケーションにアクセス許可を付与する必要があり、Android サービスは Activity.startActivityForResult() をサポートしていないため、セッションを開いたり、サービスからの再承認を介して新しいアクセス許可を追加したりすることはできません。
ただし、アプリのいずれかのアクティビティでセッションを開く/再承認すると、デフォルトでセッションの状態が SharedPreferences に保存されます。これが発生した後にサービスがセッションを作成すると、SessionState.CREATED_TOKEN_LOADED になります。Session.getState() が CREATED_TOKEN_LOADED の場合、Session は UI なしで openForRead() できることが保証され、null アクティビティを渡すことは正当です。セッションには、アクティビティによって保存されたすべての権限が付与されます。
これらすべてを簡素化するために、サービスは次のように呼び出すことができます。
Session session = Session.openActiveSession(this);
SharedPreferences に有効なトークンがない場合、この呼び出しは null を返します。
アプリの UI に設定領域がある場合、最初にトークンを保存する簡単な方法は、LoginFragment を設定パネルの 1 つとして含めることです。これにより、ユーザーはログイン/ログアウトできるようになり、同じアプリ内にある場合にサービスが取得できるようにセッション状態を保存する必要があります。