65.9K
CodeProject 正在变化。 阅读更多。
Home

Android 社交网络集成

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.74/5 (33投票s)

2014年9月8日

CPOL

5分钟阅读

viewsIcon

101767

downloadIcon

2812

使用模块化库进行 Android 的简单社交网络集成教程。

引言

如今,将社交网络集成到您的安卓应用中已是常见做法——它让用户可以轻松登录您的应用并分享他们的操作。实现方式有很多种——通常开发者会为每个网络添加原生社交网络 SDK 或使用 API。它提供了通过已安装的社交网络应用或原生对话框进行登录的方式。您必须花费时间和精力去学习和使用不同的社交网络 SDK。

如果您需要为您的应用添加更多社交网络怎么办?有时您不得不重新组织或重做所有集成。这导致了为所有社交网络创建和实现通用接口的想法。幸运的是,有一个开源模块化库 ASNE,它允许您选择必要的社交网络,并为最常用的请求(登录、分享、朋友列表等)提供完整的 SDK 和通用接口。它节省了您的时间,并简化了将来添加其他网络。此外,您可以轻松地将任何其他社交网络添加为新模块——方式与其他模块类似。

在本教程中,您将学习如何使用 ASNE 模块轻松地在安卓应用中集成 Facebook、Twitter、LinkedIn。这是一个非常基础的教程,包含登录、分享链接和显示朋友列表的功能。

 

注册应用 - 获取您的应用密钥

为了在您的应用中实现社交网络,您需要密钥来进行 API 调用。因此,注册一个新的社交网络应用并获取密钥。查看如何获取密钥的小教程。

要继续,您需要

  • Facebook App ID
  • Twitter consumer key 和 consumer secret
  • LinkedIn consumer key 和 consumer secret

将 Facebook、Twitter 和 LinkedIn 集成到您的应用中

创建一个新项目,并将我们的社交网络密钥保存在 values/strings.xml 中。

strings.xml(完整源代码

  <?xml version="1.0" encoding="utf-8"?>
      <resources>
          <string name="app_name">ASNE-tutorial</string>

          <string name="facebook_app_id">
              1646388738920557
          </string>
          <string name="twitter_consumer_key">
              BBQAUAVKYzmYtvEcNhUEvGiKd
          </string>
              byZzHPxE1tkGmnPEj5zUyc7MG464Q1LgNRcwbBJV1Ap86575os
          </string>
          <string name="linkedin_consumer_key">
              75ubsp337ll7sf
          </string>
          <string name="linkedin_consumer_secret">
              8DVk4hi3wvEyzjbh
          </string>
      </resources>

我们需要添加权限(用于互联网操作)和元数据——打开 AndroidManifest.xml 文件,添加 INTERNET 和 ACCESS_NETWORK_STATE 的 uses-permission,并为 Facebook 添加 meta-data(添加 appId 密钥)

AndroidManifest.xml(完整源代码

<?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="asne_tutorial.githubgorbin.com.asne_tutorial" >
    
        <uses-permission android:name="android.permission.INTERNET" />
        <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    
        <application
            android:allowBackup="true"
            android:icon="@drawable/ic_launcher"
            android:label="@string/app_name"
            android:theme="@style/AppTheme" >
            <activity
                android:name=".MainActivity"
                android:label="@string/app_name" >
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
    
            <meta-data
                android:name="com.facebook.sdk.ApplicationId"
                android:value="@string/facebook_app_id"/>
        </application>
    
    </manifest>

然后为 asne-modules 设置依赖项。
打开 Project Structure => 选择您的模块并打开 Dependencies => 添加新的库依赖项。

 

然后搜索 asne 并添加 asne-facebook, asne-twitter, asne-linkedin

或者直接手动将它们添加到 build.gradle
    
 build.gradle(完整源代码

apply plugin: 'com.android.application'

     android {
        compileSdkVersion 19
        buildToolsVersion '20.0.0'
        
        defaultConfig {
            applicationId "com.github.gorbin.asnetutorial"
            minSdkVersion 10
            targetSdkVersion 19
            versionCode 1
            versionName "1.0"
        }
        buildTypes {
            release {
                runProguard false
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            }
        }
     }
    
    dependencies {
        compile fileTree(include: ['*.jar'], dir: 'libs')
        compile 'com.android.support:appcompat-v7:20.0.0'
        compile 'com.github.asne:asne-facebook:0.3.1'
        compile 'com.github.asne:asne-linkedin:0.3.1'
        compile 'com.github.asne:asne-twitter:0.3.1'
    }

让我们创建一些布局。

主片段中的登录按钮。

main_fragment.xml(完整源代码

<?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical" android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#FFCCCCCC">
    
        <Button
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="Login via Facebook"
            android:id="@+id/facebook"
            android:layout_gravity="center_horizontal"
            android:background="#3b5998"
            android:layout_margin="8dp"
            android:textColor="#ffffffff" />
        <Button
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="Login via Twitter"
            android:id="@+id/twitter"
            android:layout_gravity="center_horizontal"
            android:background="#55ACEE"
            android:layout_margin="8dp"
            android:textColor="#ffffffff"/>
        <Button
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="Login via LinkedIn"
            android:id="@+id/linkedin"
            android:layout_gravity="center_horizontal"
            android:background="#287bbc"
            android:layout_margin="8dp"
            android:textColor="#ffffffff"/>
    </LinearLayout>

为用户创建简单的个人资料卡片。

profile_fragment.xml(完整源代码

<?xml version="1.0" encoding="utf-8"?>
    <ScrollView
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:background="@color/grey_light">
    
        <RelativeLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentTop="true"
            android:layout_alignParentLeft="true"
            android:layout_alignParentStart="true"
            android:layout_margin="8dp"
            android:id="@+id/frame"
            android:background="@color/dark">
    
            <RelativeLayout
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_alignParentTop="true"
                android:layout_alignParentLeft="true"
                android:layout_alignParentStart="true"
                android:layout_margin="3dp"
                android:id="@+id/card"
                android:background="#FFFFFF">
    
                <ImageView
                    android:layout_width="100dp"
                    android:layout_height="100dp"
                    android:id="@+id/imageView"
                    android:layout_margin="8dp"
                    android:padding="2dp"
                    android:background="@color/grey_light"
                    android:layout_alignParentTop="true"
                    android:layout_alignParentLeft="true"
                    android:layout_alignParentStart="true"
                    android:src="@drawable/user"
                    android:adjustViewBounds="true"
                    android:cropToPadding="true"
                    android:scaleType="centerCrop"/>
    
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:textAppearance="?android:attr/textAppearanceLarge"
                    android:text="NoName"
                    android:maxLines="3"
                    android:singleLine="false"
                    android:id="@+id/name"
                    android:padding="8dp"
                    android:layout_alignTop="@+id/imageView"
                    android:layout_toRightOf="@+id/imageView"
                    android:layout_toEndOf="@+id/imageView"
                    android:layout_alignParentRight="true"
                    android:layout_alignParentEnd="true" />
    
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="null"
                    android:maxLines="3"
                    android:singleLine="false"
                    android:id="@+id/id"
                    android:padding="8dp"
                    android:layout_below="@+id/name"
                    android:layout_alignLeft="@+id/name"
                    android:layout_alignStart="@+id/name" />
    
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text=""
                    android:id="@+id/info"
                    android:padding="8dp"
                    android:layout_marginBottom="4dp"
                    android:layout_below="@+id/imageView"
                    android:layout_alignParentLeft="true"
                    android:layout_alignParentStart="true" />
    
            </RelativeLayout>
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:id="@+id/buttonLayout"
                android:layout_below="@+id/card"
                android:layout_alignParentLeft="true"
                android:layout_alignParentRight="true"
                android:gravity="center"
                android:background="@color/grey_light">
    
                <Button
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:text="Friends"
                    android:id="@+id/friends"
                    android:padding="8dp"
                    android:background="@color/dark"
                    android:layout_marginRight="1dp"
                    android:layout_weight="1"
                    android:textColor="#ffffffff"/>
                <Button
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:text="Share"
                    android:id="@+id/share"
                    android:padding="8dp"
                    android:background="@color/dark"
                    android:layout_weight="1"
                    android:textColor="#ffffffff"/>
            </LinearLayout>
        </RelativeLayout>
    
    </ScrollView>

并保存社交网络颜色到

color.xml(完整源代码

<?xml version="1.0" encoding="utf-8"?>
    <resources>
        <color name="grey_light">#FFCCCCCC</color>
        <color name="dark">#4b4b4b</color>
        <color name="facebook">#3b5998</color>
        <color name="twitter">#55ACEE</color>
        <color name="linkedin">#287bbc</color>
    </resources>

然后,我们来设置 MainActivity.java。我们应该设置 onActivityResult 方法来捕获请求登录后的响应。

MainActivity.java(完整源代码

public static final String SOCIAL_NETWORK_TAG = "SocialIntegrationMain.SOCIAL_NETWORK_TAG";
    
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    Fragment fragment = getSupportFragmentManager().findFragmentByTag(SOCIAL_NETWORK_TAG);
    if (fragment != null) {
        fragment.onActivityResult(requestCode, resultCode, data);
    }
}

每次登录表单后,社交网络都会发送 onActivityResult,我们应该检查它并将其发送到我们的 SocialNetworkManager,后者将其传递给正确的 SocialNetwork

现在,我们可以创建 MainFragment.java 并集成任何社交网络——这很简单。

1. 获取 SocialNetworkManager

mSocialNetworkManager = (SocialNetworkManager) getFragmentManager().findFragmentByTag(MAinActivity.SOCIAL_NETWORK_TAG);

2. 从 values.xml 获取密钥 - 注意我们在 AndroidManifest.xml 中使用的 Facebook appId

String TWITTER_CONSUMER_KEY = getActivity().getString(R.string.twitter_consumer_key);
String TWITTER_CONSUMER_SECRET = getActivity().getString(R.string.twitter_consumer_secret);
String TWITTER_CALLBACK_URL = "oauth://ASNE";
String LINKEDIN_CONSUMER_KEY = getActivity().getString(R.string.linkedin_consumer_key);
String LINKEDIN_CONSUMER_SECRET = getActivity().getString(R.string.linkedin_consumer_secret);

3. 创建选定的带有权限的 SocialNetworks

ArrayList<String> fbScope = new ArrayList<String>();
fbScope.addAll(Arrays.asList("public_profile, email, user_friends"));
FacebookSocialNetwork fbNetwork = new FacebookSocialNetwork(this, fbScope);

// permissions for twitter in developer twitter console
TwitterSocialNetwork twNetwork = new TwitterSocialNetwork(this, TWITTER_CONSUMER_KEY, TWITTER_CONSUMER_SECRET);

String linkedInScope = "r_basicprofile+rw_nus+r_network+w_messages";
LinkedInSocialNetwork liNetwork = new LinkedInSocialNetwork(this, LINKEDIN_CONSUMER_KEY, LINKEDIN_CONSUMER_SECRET, linkedInScope);     

4. 检查 SocialNetworkManager 是否为 null,如果是,则初始化它并将 SocialNetworks 添加到其中。

mSocialNetworkManager = new SocialNetworkManager();
    
mSocialNetworkManager.addSocialNetwork(fbNetwork);
mSocialNetworkManager.addSocialNetwork(twNetwork);
mSocialNetworkManager.addSocialNetwork(liNetwork);
    
//Initiate every network from mSocialNetworkManager
getFragmentManager().beginTransaction().add(mSocialNetworkManager, MAinActivity.SOCIAL_NETWORK_TAG).commit();
mSocialNetworkManager.setOnInitializationCompleteListener(this);

不要忘记实现 SocialNetworkManager.OnInitializationCompleteListener

5. 如果 SocialNetworkManager 是从我们已经初始化它的另一个片段过来的 - 获取所有已初始化的社交网络并为它们添加必要的监听器。

if(!mSocialNetworkManager.getInitializedSocialNetworks().isEmpty()) {
    List<SocialNetwork> socialNetworks = mSocialNetworkManager.getInitializedSocialNetworks();
    for (SocialNetwork socialNetwork : socialNetworks) {
        socialNetwork.setOnLoginCompleteListener(this);
    }
}

不要忘记实现 `OnLoginCompleteListener`

6. 现在我们需要捕获 `SocialNetworks` 初始化后的回调。

@Override
public void onSocialNetworkManagerInitialized() {
    for (SocialNetwork socialNetwork : mSocialNetworkManager.getInitializedSocialNetworks()) {
        socialNetwork.setOnLoginCompleteListener(this);
        initSocialNetwork(socialNetwork);
    }
}

不要忘记实现 `OnLoginCompleteListener`

MainFragment 中包含初始化和为按钮设置监听器的完整 onCreateViewonSocialNetworkManagerInitialized
    
MainFragment.java(完整源代码

    public static SocialNetworkManager mSocialNetworkManager;
    /**
     * SocialNetwork Ids in ASNE:
     * 1 - Twitter
     * 2 - LinkedIn
     * 3 - Google Plus
     * 4 - Facebook
     * 5 - Vkontakte
     * 6 - Odnoklassniki
     * 7 - Instagram
     */
    public static final int TWITTER = TwitterSocialNetwork.ID;
    public static final int LINKEDIN = LinkedInSocialNetwork.ID;
    public static final int FACEBOOK = FacebookSocialNetwork.ID;
    
    private Button facebook;
    private Button twitter;
    private Button linkedin;

    public MainFragment() {
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.main_fragment, container, false);
        ((MainActivity)getActivity()).getSupportActionBar().setTitle(R.string.app_name);
        // init buttons and set Listener
        facebook = (Button) rootView.findViewById(R.id.facebook);
        facebook.setOnClickListener(loginClick);
        twitter = (Button) rootView.findViewById(R.id.twitter);
        twitter.setOnClickListener(loginClick);
        linkedin = (Button) rootView.findViewById(R.id.linkedin);
        linkedin.setOnClickListener(loginClick);

        //Get Keys for initiate SocialNetworks
        String TWITTER_CONSUMER_KEY = getActivity().getString(R.string.twitter_consumer_key);
        String TWITTER_CONSUMER_SECRET = getActivity().getString(R.string.twitter_consumer_secret);
        String LINKEDIN_CONSUMER_KEY = getActivity().getString(R.string.linkedin_consumer_key);
        String LINKEDIN_CONSUMER_SECRET = getActivity().getString(R.string.linkedin_consumer_secret);

        //Chose permissions
        ArrayList<String> fbScope = new ArrayList<String>();
        fbScope.addAll(Arrays.asList("public_profile, email, user_friends"));
        String linkedInScope = "r_basicprofile+rw_nus+r_network+w_messages";

        //Use manager to manage SocialNetworks
        mSocialNetworkManager = (SocialNetworkManager) getFragmentManager().findFragmentByTag(SOCIAL_NETWORK_TAG);

        //Check if manager exist
        if (mSocialNetworkManager == null) {
            mSocialNetworkManager = new SocialNetworkManager();

            //Init and add to manager FacebookSocialNetwork
            FacebookSocialNetwork fbNetwork = new FacebookSocialNetwork(this, fbScope);
            mSocialNetworkManager.addSocialNetwork(fbNetwork);

            //Init and add to manager TwitterSocialNetwork
            TwitterSocialNetwork twNetwork = new TwitterSocialNetwork(this, TWITTER_CONSUMER_KEY, TWITTER_CONSUMER_SECRET);
            mSocialNetworkManager.addSocialNetwork(twNetwork);

            //Init and add to manager LinkedInSocialNetwork
            LinkedInSocialNetwork liNetwork = new LinkedInSocialNetwork(this, LINKEDIN_CONSUMER_KEY, LINKEDIN_CONSUMER_SECRET, linkedInScope);
            mSocialNetworkManager.addSocialNetwork(liNetwork);

            //Initiate every network from mSocialNetworkManager
            getFragmentManager().beginTransaction().add(mSocialNetworkManager, SOCIAL_NETWORK_TAG).commit();
            mSocialNetworkManager.setOnInitializationCompleteListener(this);
        } else {
            //if manager exist - get and setup login only for initialized SocialNetworks
            if(!mSocialNetworkManager.getInitializedSocialNetworks().isEmpty()) {
                List<SocialNetwork> socialNetworks = mSocialNetworkManager.getInitializedSocialNetworks();
                for (SocialNetwork socialNetwork : socialNetworks) {
                    socialNetwork.setOnLoginCompleteListener(this);
                    initSocialNetwork(socialNetwork);
                }
            }
        }
        return rootView;
    }

    private void initSocialNetwork(SocialNetwork socialNetwork){
        if(socialNetwork.isConnected()){
            switch (socialNetwork.getID()){
                case FACEBOOK:
                    facebook.setText("Show Facebook profile");
                    break;
                case TWITTER:
                    twitter.setText("Show Twitter profile");
                    break;
                case LINKEDIN:
                    linkedin.setText("Show LinkedIn profile");
                    break;
            }
        }
    }
    
    @Override
    public void onSocialNetworkManagerInitialized() {
        //when init SocialNetworks - get and setup login only for initialized SocialNetworks
        for (SocialNetwork socialNetwork : mSocialNetworkManager.getInitializedSocialNetworks()) {
            socialNetwork.setOnLoginCompleteListener(this);
            initSocialNetwork(socialNetwork);
        }
    }

现在我们可以请求登录任何社交网络了。

SocialNetwork socialNetwork = mSocialNetworkManager.getSocialNetwork(networkId);
socialNetwork.requestLogin();

完整的 OnClickListener loginClick,检查社交网络连接,如果社交网络已连接,则点击时显示 ProfileFragment.java

MainFragment.java(完整源代码

    private View.OnClickListener loginClick = new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            int networkId = 0;
            switch (view.getId()){
                case R.id.facebook:
                    networkId = FACEBOOK;
                    break;
                case R.id.twitter:
                    networkId = TWITTER;
                    break;
                case R.id.linkedin:
                    networkId = LINKEDIN;
                    break;
            }
            SocialNetwork socialNetwork = mSocialNetworkManager.getSocialNetwork(networkId);
            if(!socialNetwork.isConnected()) {
                if(networkId != 0) {
                    socialNetwork.requestLogin();
                    MainActivity.showProgress(socialNetwork, "Loading social person");
                } else {
                    Toast.makeText(getActivity(), "Wrong networkId", Toast.LENGTH_LONG).show();
                }
            } else {
                startProfile(socialNetwork.getID());
            }
        }
    };

社交网络登录表单后,我们收到回调 onLoginSuccess(int networkId)onError(int networkId, String requestID, String errorMessage, Object data) - 如果登录成功,则显示个人资料,如果出错,则显示 Toast 提示。

MainFragment.java(完整源代码

    @Override
    public void onLoginSuccess(int networkId) {
        MainActivity.hideProgress();
        startProfile(networkId);
    }

    @Override
    public void onError(int networkId, String requestID, String errorMessage, Object data) {
        MainActivity.hideProgress();
        Toast.makeText(getActivity(), "ERROR: " + errorMessage, Toast.LENGTH_LONG).show();
    }

    private void startProfile(int networkId){
        ProfileFragment profile = ProfileFragment.newInstannce(networkId);
        getActivity().getSupportFragmentManager().beginTransaction()
                .addToBackStack("profile")
                .replace(R.id.container, profile)
                .commit();
    }

    
现在在 ProfileFragment.java 中从 MainFragment.java 获取 networkId

ProfileFragment.java(完整源代码

    public static ProfileFragment newInstannce(int id) {
        ProfileFragment fragment = new ProfileFragment();
        Bundle args = new Bundle();
        args.putInt(NETWORK_ID, id);
        fragment.setArguments(args);
        return fragment;
    }
    
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        
        networkId = getArguments().containsKey(NETWORK_ID) ? getArguments().getInt(NETWORK_ID) : 0;
        
    }

通过 `networkId`,我们可以获取社交网络并请求当前用户个人资料,例如:

socialNetwork = MainFragment.mSocialNetworkManager.getSocialNetwork(networkId);
socialNetwork.setOnRequestCurrentPersonCompleteListener(this);
socialNetwork.requestCurrentPerson();

不要忘记实现 `OnRequestSocialPersonCompleteListener`

完成请求后,我们可以使用 SocialPerson 数据来填充我们的个人资料视图。

ProfileFragment.java(完整源代码

    @Override
    public void onRequestSocialPersonSuccess(int i, SocialPerson socialPerson) {
        MainActivity.hideProgress();
        name.setText(socialPerson.name);
        id.setText(socialPerson.id);
        String socialPersonString = socialPerson.toString();
        String infoString = socialPersonString.substring(socialPersonString.indexOf("{")+1, socialPersonString.lastIndexOf("}"));
        info.setText(infoString.replace(", ", "\n"));
        Picasso.with(getActivity())
            .load(socialPerson.avatarURL)
            .into(photo);
    }
    
    @Override
    public void onError(int networkId, String requestID, String errorMessage, Object data) {
        MainActivity.hideProgress();
        Toast.makeText(getActivity(), "ERROR: " + errorMessage, Toast.LENGTH_LONG).show();
    }

要注销,您只需使用

socialNetwork.logout();
getActivity().getSupportFragmentManager().popBackStack();

确实,就是这样——我们集成了 Facebook、Twitter 和 LinkedIn 并获取了用户个人资料。您可以添加其他社交网络,例如 Instagram 或 Google Plus,只需为它们添加依赖项,然后像这样将它们添加到 SocialNetworkManager 中:

GooglePlusSocialNetwork gpNetwork = new GooglePlusSocialNetwork(this);
mSocialNetworkManager.addSocialNetwork(gpNetwork);

InstagramSocialNetwork instagramNetwork = new InstagramSocialNetwork(this, INSTAGRAM_CLIENT_KEY, INSTAGRAM_CLIENT_SECRET, instagramScope);
mSocialNetworkManager.addSocialNetwork(instagramNetwork);

当然,您也可以使用我们为它们提供的任何其他请求!

分享链接

在本教程中,我们将进行更多请求:分享链接获取用户朋友列表
让我们通过社交网络 分享 简单链接。

1. 设置分享按钮

share = (Button) rootView.findViewById(R.id.share);
share.setOnClickListener(shareClick);

2. 要分享,我们需要填写 bundle 并请求发布链接。

Bundle postParams = new Bundle();
postParams.putString(SocialNetwork.BUNDLE_LINK, link);
socialNetwork.requestPostLink(postParams, message, postingComplete);

3. 当然还有一些回调动作

private OnPostingCompleteListener postingComplete = new OnPostingCompleteListener() {
    @Override
    public void onPostSuccessfully(int socialNetworkID) {
        Toast.makeText(getActivity(), "Sent", Toast.LENGTH_LONG).show();
    }
    
    @Override
    public void onError(int socialNetworkID, String requestID, String errorMessage, Object data) {
        Toast.makeText(getActivity(), "Error while sending: " + errorMessage, Toast.LENGTH_LONG).show();
    }
};

4. 所以在 OnClickListener shareClick 中,我们创建标准警告对话框,通知用户我们想分享链接,并在 PositiveButton 中发布链接。

ProfileFragment.java(完整源代码

        private View.OnClickListener shareClick = new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                AlertDialog.Builder ad = alertDialogInit("Would you like to post Link:", link);
                ad.setPositiveButton("Post link", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int id) {
                        Bundle postParams = new Bundle();
                        postParams.putString(SocialNetwork.BUNDLE_NAME, 
                            "Simple and easy way to add social networks for android application");
                        postParams.putString(SocialNetwork.BUNDLE_LINK, link);
                        socialNetwork.requestPostLink(postParams, message, postingComplete);
                    }
                });
                ad.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int i) {
                        dialog.cancel();
                    }
                });
                ad.setOnCancelListener(new DialogInterface.OnCancelListener() {
                    public void onCancel(DialogInterface dialog) {
                        dialog.cancel();
                    }
                });
                ad.create().show();
            }
        };

        private AlertDialog.Builder alertDialogInit(String title, String message){
            AlertDialog.Builder ad = new AlertDialog.Builder(getActivity());
            ad.setTitle(title);
            ad.setMessage(message);
            ad.setCancelable(true);
            return ad;
        }

获取用户朋友列表

让我们通过社交网络获取朋友列表:

1. 获取社交网络 ID

2. 根据 ID 获取 SocialNetwork 并请求获取朋友

SocialNetwork socialNetwork = MainFragment.mSocialNetworkManager.getSocialNetwork(networkId);
socialNetwork.setOnRequestGetFriendsCompleteListener(this);
socialNetwork.requestGetFriends();

不要忘记实现 `OnRequestGetFriendsCompleteListener`

3. 获取响应

@Override
public void OnGetFriendsIdComplete(int id, String[] friendsID) {
    ((MainActivity)getActivity()).getSupportActionBar().setTitle(friendsID.length + " Friends");
}

@Override
public void OnGetFriendsComplete(int networkID, ArrayList<SocialPerson> socialPersons) {
    MainActivity.hideProgress();
    FriendsListAdapter adapter = new FriendsListAdapter(getActivity(), socialPersons, networkID);
    listView.setAdapter(adapter);
}

@Override
public void onError(int networkId, String requestID, String errorMessage, Object data) {
    MainActivity.hideProgress();
    Toast.makeText(getActivity(), "ERROR: " + errorMessage, Toast.LENGTH_LONG).show();
}

您可以在 FriendsFragment.java 中阅读更多详细信息。

结论

使用 ASNE 模块,您可以轻松快速地集成任何流行的社交网络,并在您的应用程序中使用常见的请求。当然,该库还有更多您可以在应用程序中使用的方法。但如果您想使用 SDK 或 API 中的社交网络方法,您可以轻松获取访问令牌或获取应用程序中主对象的实例。

本教程只是一个简单的演示,如果您需要更复杂的,请查看 ASNE 演示应用

© . All rights reserved.