AndroidSocialNetworksは、ソーシャルサービスで動作するAndroid用のライブラリです。 ネットワークは簡単です。 あなたが今までソーシャルで仕事をしようとしたことがあるなら。 ネットワーク、あなたはそれがどれほど難しいか知っています。 各ソーシャルのドキュメントを読む必要があります。 ネットワーク、SDKまたはサードパーティライブラリをダウンロードして接続し、httpリクエストのライフサイクルを処理します。 AndroidSocialNetworkは、Facebook、Twitter、LinkedIn、およびGoogle Plusの共通インターフェースを含む、SocialNetworkManager.Buildを使用してSocialNetworkManagerを構築する->それをFragmentManagerに追加する-> AndroidManifest.xmlを構成する->構成されたソーシャルネットワークを操作する ネットワーク。 ログイン、ステータスの更新の投稿、写真の投稿、友人の追加/削除を行うことができます。
使い方
最初にSocialNetworkManagerを初期化する必要があります。これはSocialNetworkManager.Builderを使用して行われます。 SocialNetworkManagerは、retainedInstance(true)を持つフラグメントです。
これは、ライフサイクルを監視できるようにするために必要です。
SocialNetworkManagerを初期化した後、FragmentManagerに追加する必要があります。 互換性のために、SupportFragmentManagerを使用する必要があることに注意してください。
mSocialNetworkManager = (SocialNetworkManager) getFragmentManager().findFragmentByTag(SOCIAL_NETWORK_TAG); if (mSocialNetworkManager == null) { mSocialNetworkManager = SocialNetworkManager.Builder.from(getActivity()) .twitter(<api_token>, <api_secret>) .linkedIn(<api_token>, <api_secret>, "r_basicprofile+rw_nus+r_network+w_messages") .facebook() .googlePlus() .build(); getFragmentManager().beginTransaction().add(mSocialNetworkManager, SOCIAL_NETWORK_TAG).commit(); }
フラグメントの追加はトランザクションであるため、すぐにSocialNetworkManagerの使用を開始することはできません。このため、SocialNetworkManager.OnInitializationCompleteListenerというコールバックがあります。
mSocialNetworkManager.setOnInitializationCompleteListener(this);
たとえば、Twitterが接続されているかどうかを表示する必要がある場合、onSocialNetworkManagerInitializedでUIを更新する必要があります。
各要求メソッドは、リスナーを受信する場合と受信しない場合があります。2つの場合、インストールされている場合、グローバルなものが呼び出されます。
グローバルリスナーをログインに設定します
@Override public void onSocialNetworkManagerInitialized() { super.onSocialNetworkManagerInitialized(); for (SocialNetwork socialNetwork : mSocialNetworkManager.getInitializedSocialNetworks()) { socialNetwork.setOnLoginCompleteListener(this); } }
LinkedInのユーザー名を呼び出す
mSocialNetworkManager.getLinkedInSocialNetwork().requestLogin();
結果はグローバルコールバックにあります。
@Override public void onLoginSuccess(int socialNetworkID) { } @Override public void onError(int socialNetworkID, String requestID, String errorMessage, Object data) { }
グローバルコールバックを使用したくない場合は、ローカルコールバックを使用できます。
mSocialNetworkManager.getGooglePlusSocialNetwork().requestLogin(new DemoOnLoginCompleteListener()); private class DemoOnLoginCompleteListener implements OnLoginCompleteListener { @Override public void onLoginSuccess(int socialNetworkID) { } @Override public void onError(int socialNetworkID, String requestID, String errorMessage, Object data) { } }
このようなメカニズムはrequestLoginだけでなく、すべてのメインメソッドが2種類のコールバックジョブをサポートするために使用できます。
ソーシャルの実装。 ネットワーク
利用可能なソーシャルが十分にない場合。 別のネットワークにサポートを追加したい場合は、addSocialNetwork(SocialNetwork socialNetwork)メソッドを使用してこれを行うことができます。
onSocialNetworkManagerInitializedでこれを行う必要があることに注意してください。 また、ソーシャルのIDにも注意してください。 ネットワークは一意である必要があります。 1、2、3、4-すでに予約済み。
利用可能な方法
全リスト
ソーシャルサポート ネットワーク
仕組み
ご覧のとおり、SocialNetworkManagerはスニペットです(互換性のためにサポートv4から)。 これは、アプリケーションのライフサイクルを簡単に追跡できるようにするために必要です。 また、retainedInstance(true)に設定されているため、ネットワーク要求は通常、ライフサイクルの変更に耐えられます...
SocialNetworkManager.Builderは、パラメーターを含むバンドルを準備するだけです。
public SocialNetworkManager build() { Bundle args = new Bundle(); if (!TextUtils.isEmpty(twitterConsumerKey) && !TextUtils.isEmpty(twitterConsumerSecret)) { args.putString(PARAM_TWITTER_KEY, twitterConsumerKey); args.putString(PARAM_TWITTER_SECRET, twitterConsumerSecret); } if (!TextUtils.isEmpty(linkedInConsumerKey) && !TextUtils.isEmpty(linkedInConsumerSecret) && !TextUtils.isEmpty(linkedInPermissions)) { args.putString(PARAM_LINKEDIN_KEY, linkedInConsumerKey); args.putString(PARAM_LINKEDIN_SECRET, linkedInConsumerSecret); args.putString(PARAM_LINKEDIN_PERMISSIONS, linkedInPermissions); } if (facebook) { args.putBoolean(PARAM_FACEBOOK, true); } if (googlePlus) { args.putBoolean(PARAM_GOOGLE_PLUS, true); } SocialNetworkManager socialNetworkManager = new SocialNetworkManager(); socialNetworkManager.setArguments(args); return socialNetworkManager; }
SocialNetworkManagerの内部はすべて初期化されたソーシャルです。 ネットワークはHashMapに保存されます
private Map<Integer, SocialNetwork> mSocialNetworksMap = new HashMap<Integer, SocialNetwork>();
コールバックのライフサイクルでは、すべてのソーシャルを通過します。 ネットワークと値の転送:
public void onStop() { … for (SocialNetwork socialNetwork : mSocialNetworksMap.values()) { socialNetwork.onStop(); } }
各ソーシャル。 ネットワークは、抽象クラスSocialNetworkを継承する必要があります。
このソーシャルメソッドの戻り値によって、getID()メソッドを正確に再定義する必要があります。 ネットワークと異なります。 私の実装では、スイッチでsocialNetwork.getID()を使用できるように、便宜上、パブリックIDを作成しました。
public class GooglePlusSocialNetwork extends SocialNetwork … public static final int ID = 3;
ライフサイクルメソッドは、必要な場合にのみ再定義する必要はありません。
requestLogin、requestPersonメソッドなどを実装するには コールバックでメソッドを再定義する必要があります。 これは、グローバルリスナーとローカルリスナーの両方のサポートのために必要です。
コールバックはマップに保存されます
protected Map<String, SocialNetworkListener> mGlobalListeners = new HashMap<String, SocialNetworkListener>(); protected Map<String, SocialNetworkListener> mLocalListeners = new HashMap<String, SocialNetworkListener>();
グローバルコールバックを追加すると、mGlobalListenersに追加され、コールバックのない呼び出しの場合は、コールバックを使用してメソッドを呼び出し、nullを渡します。
public void requestSocialPerson(String userID) { requestSocialPerson(userID, null); }
コールバックを使用するメソッドは、リスナーを登録します。
public void requestSocialPerson(String userID, OnRequestSocialPersonCompleteListener onRequestSocialPersonCompleteListener) { registerListener(REQUEST_GET_PERSON, onRequestSocialPersonCompleteListener); }
registerListenerの実装は非常に簡単です。
private void registerListener(String listenerID, SocialNetworkListener socialNetworkListener) { if (socialNetworkListener != null) { mLocalListeners.put(listenerID, socialNetworkListener); } else { mLocalListeners.put(listenerID, mGlobalListeners.get(listenerID)); } }
ネットワークリクエスト
ネットワーク要求を実行するには、いずれかのSDKメソッドが使用されます。
Request request = Request.newMeRequest(currentSession, new Request.GraphUserCallback() { @Override public void onCompleted(GraphUser me, Response response) { … request.executeAsync();
またはAsyncTasks、タスクの非同期を恐れないでください。覚えている場合は、retainedInstanceのFragmentで使用します(true)。 このトピックに関する良い記事: http : //www.androiddesignpatterns.com/2013/04/retaining-objects-across-config-changes.html
重要です
- ライブラリはアプリケーションの状態とライフサイクルを気にしません。自分でやらなければなりません!
- Google Plusを使用している場合、アクティビティに次のコードを追加します。
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); /** * This is required only if you are using Google Plus, the issue is that there SDK * require Activity to launch Auth, so library can't receive onActivityResult in fragment */ Fragment fragment = getSupportFragmentManager().findFragmentByTag(BaseDemoFragment.SOCIAL_NETWORK_TAG); if (fragment != null) { fragment.onActivityResult(requestCode, resultCode, data); } }
ライブラリへのリンク: https : //github.com/antonkrasov/AndroidSocialNetworks
サンプルアプリケーション: AndroidSocialNetworks APIDemos