使用facebook sdk实现分享功能
2014-11-09 15:45 阅读(241)

由于最近在做一个联想的android app,涉及到twitter、facebook的分享功能,本来可以使用友推、shareSdk等一些集成的分享工具,简单也比较好用,但本着学习的态度还是直接使用原生的sdk直接开发。本文先说说facebook的。

第一步,到facebook开发者官网(https://developers.facebook.com/)创建个应用。国内的网络要想直接访问,你知道的,不行。这里介绍个工具,自由门 翻墙工具。



然后选择创建android的应用,填写应用名称。之后跳到如下页面:


点击"Getting started" 进入:


这是一个快速创建开发环境的指导文档,按照步骤走就行了,比如下载sdk、安装sdk,创建签名,安装模拟器等。如果你要是使用真机开发那得需要翻墙,在介绍个工具fqrouter ,使用时打开即可。

这里在介绍个生成签名的代码:

	    生成签名
	    try {
			PackageInfo info = getPackageManager().getPackageInfo(
					"com.example.myfacebook", PackageManager.GET_SIGNATURES);
			for (Signature signature : info.signatures) {
				MessageDigest md = MessageDigest.getInstance("SHA");
				md.update(signature.toByteArray());

				//TextView tvmyName = (TextView) findViewById(R.id.KeyText);
				String key = Base64.encodeBytes(md.digest());
				//tvmyName.setText(key);
				System.out.println("key========" + key);

			}
		} catch (NameNotFoundException e) {

		} catch (NoSuchAlgorithmException e) {

		}
将"com.example.myfacebook" 换成你的包名即可。

另外,有俩个东西你需要记录下来,后面的代码开发会用到:appId、appSecret。


第二步,如何安装sdk

   其实,如果你看明白了上面的facebook的文档,这第二步是多余的

   将下载的sdk解压后,将FacebookSDK导入到eclipse中(如果你使用的是eclipse作为IDE),并将其设为引用库,如下:



之后是创建你的应用,将FacebookSDK引用到你的应用中:

这时可能会出现 android-support-v4.jar   版本不一致问题,没关系,将二者(FacebookSDK、myfacebook)弄成一致就行。ok,facebook  SDK就安装完毕了。

下面就是如何使用sdk开发出我们想要的分享功能。


第三步,利用sdk开发分享。

   AndroidManifest.xml 配置:

   

配置 strings.xml  :

  在strings.xml 中添加<string name="facebook_app_id"></string>   将你上面记住的appid设置其中。


写java代码,十分简单:

package com.example.myfacebook;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

import android.app.Activity;
import android.content.Intent;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.content.pm.Signature;
import android.os.Bundle;
import android.util.Log;
import android.view.View;

import com.example.util.Base64;
import com.facebook.UiLifecycleHelper;
import com.facebook.widget.FacebookDialog;

public class MainActivity extends Activity {
	private UiLifecycleHelper uiHelper;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		this.setContentView(R.layout.main);
		//创建UIhelper,之后的所有操作都是通过这个完成的
		uiHelper = new UiLifecycleHelper(this, null);
	    uiHelper.onCreate(savedInstanceState);
	    
	    
//	    生成签名
//	    try {
//			PackageInfo info = getPackageManager().getPackageInfo(
//					"com.example.myfacebook", PackageManager.GET_SIGNATURES);
//			for (Signature signature : info.signatures) {
//				MessageDigest md = MessageDigest.getInstance("SHA");
//				md.update(signature.toByteArray());
//
//				//TextView tvmyName = (TextView) findViewById(R.id.KeyText);
//				String key = Base64.encodeBytes(md.digest());
//				//tvmyName.setText(key);
//				System.out.println("key========" + key);
//
//			}
//		} catch (NameNotFoundException e) {
//
//		} catch (NoSuchAlgorithmException e) {
//
//		}
	}
	/**
	 * 发送分享,
	 * @param view
	 */
	public void feed(View view){
		FacebookDialog shareDialog = new FacebookDialog.ShareDialogBuilder(this).setLink("http://www.google.com").setName("google的连接分享一下").build();
        uiHelper.trackPendingDialogCall(shareDialog.present());
	}
	/**
	 * 重写onActivityResult,用于接收facebook的返回状态
	 */
	@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
	    super.onActivityResult(requestCode, resultCode, data);

	    uiHelper.onActivityResult(requestCode, resultCode, data, new FacebookDialog.Callback() {
	        @Override
	        public void onError(FacebookDialog.PendingCall pendingCall, Exception error, Bundle data) {
	            Log.e("Activity", String.format("Error: %s", error.toString()));
	        }

	        @Override
	        public void onComplete(FacebookDialog.PendingCall pendingCall, Bundle data) {
	            Log.i("Activity", "feed Success!");
	        }
	    });
	}
	@Override
	protected void onResume() {
	    super.onResume();
	    uiHelper.onResume();
	}

	@Override
	protected void onSaveInstanceState(Bundle outState) {
	    super.onSaveInstanceState(outState);
	    uiHelper.onSaveInstanceState(outState);
	}

	@Override
	public void onPause() {
	    super.onPause();
	    uiHelper.onPause();
	}

	@Override
	public void onDestroy() {
	    super.onDestroy();
	    uiHelper.onDestroy();
	}
}


完毕。这里有个完整的demo,需要的可以下载看看:demo

另外注意,测试过程中需要打开翻墙软件,以及安装facebook客户端(apk)。l

另外,本着共同学习的精神,大家觉得哪写的有问题,可以指点出来,共同进步。