• Android 开发 facebook分享,登陆,获取信息


    1 搭建开发环境
        1.1 在Facebook官网SDK中,下载4.0.0的SDK包。
        
        1.2 使用Eclipse导入SDK包中的Facebook工程,并添加android-support-v4.jar。
        
        1.3 代码中,有好多List的实例化没有类型,只要把JDK修改为1.7即可。(Facebook工程 -> 右键 -> properties -> Java Compiler -> Enable project specific settings选中 -> Compiler compliance level选择1.7)。
        
        1.4 导入android 的Bolts library(bolts-android-x.x.x.jar).
        
        1.5 将下面代码加入AndroidManiffest.xml中,并修改string.xml中facebook_app_id的值。
            <activity android:name="com.facebook.FacebookActivity"
                android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"
                android:theme="@android:style/Theme.Translucent.NoTitleBar"       
                android:label="@string/app_name" />            
            <meta-data
                android:name="com.facebook.sdk.ApplicationId"
                android:value="@string/facebook_app_id" />
        1.6 获取签名的HashCode
            1.6.1 下载 openssl-0.9.8k_WIN32(http://download.csdn.net/detail/h7870181/5054864),解压到C盘根目录。
            1.6.2 cmd下执行下面命令,密码为android。
            keytool -export -alias myAlias -keystore C:Usersderrick.androiddebug.keystore | C:openssl-0.9.8k_WIN32inopenssl sha1 -binary | C:openssl-0.9.8k_WIN32inopenssl enc -a -e

        
        
    2 初始化
        
        FacebookSdk.sdkInitialize(getApplicationContext());
        CallbackManager callbackManager = CallbackManager.Factory.create();

    3 分享
        此功能比较简单,
        
        2.1 在界面布局文件中,加入如下代码:
        
            <com.facebook.share.widget.ShareButton
                android:id="@+id/shared_button"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center_horizontal"
                android:layout_marginTop="30dp"
                android:layout_marginBottom="30dp" />
                
        2.2 在Activity中,实例化ShareButton,配置分享内容即可。        
            
            ShareButton shareButton = (ShareButton) findViewById(R.id.shared_button);
            //分享网址
            shareButton.setShareContent(new ShareLinkContent.Builder().setContentUrl(Uri.parse("https://developers.facebook.com")).build());
            //
            
    3 授权登录

        3.1 FaceBook默认登录
     
            3.1.1 添加登录按钮
            
            <com.facebook.login.widget.LoginButton
                android:id="@+id/login_button"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center_horizontal"
                android:layout_marginTop="30dp"
                android:layout_marginBottom="30dp" />
                
            3.1.2 响应功能,并添加回调
        
            LoginButton loginButton = (LoginButton) findViewById(R.id.login_button);
            loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
                @Override
                public void onSuccess(LoginResult loginResult) {
                    println("onSuccess");
                }

                @Override
                public void onCancel() {
                    println("onCancel");
                }

                @Override
                public void onError(FacebookException exception) {
                    println("onError");
                }
            });

        3.2 自定义登录
            首先在初始化(2 初始化)完成后,添加登录回调:
            
            LoginManager.getInstance().registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
                @SuppressWarnings("deprecation")
                @Override
                public void onCancel() {
                    CookieSyncManager.createInstance(MainActivity.this);
                    CookieManager cookieManager = CookieManager.getInstance();
                    cookieManager.removeAllCookie();
                    CookieSyncManager.getInstance().sync();
                }

                @Override
                public void onError(FacebookException arg0) {
                }

                @Override
                public void onSuccess(LoginResult arg0) {
                    getLoginInfo(loginResult.getAccessToken());
                }

            });
                    
            @Override
            protected void onActivityResult(final int requestCode, final int resultCode, final Intent data) {
                super.onActivityResult(requestCode, resultCode, data);
                callbackManager.onActivityResult(requestCode, resultCode, data);
            }
            
            3.2.1 添加登录按钮
                
                和普通的Button一样的样式,加入到布局文件中。
                
            3.2.2 实现功能
            
                在button的Onclick事件中,执行授权登录的功能代码:
                LoginManager.getInstance().logInWithReadPermissions(MainActivity.this, Arrays.asList("user_friends", "public_profile"));
            

        3.3 启用Chrome自定义选项卡
        
            当未安装Facebook是,可以使用Chrome选项卡来授权登录(如果Chrome保存用户信息,可以直接登录)。
            
            3.3.1 在Androidmanifest.xml中以下(类似1.5中):
            
                <activity
                    android:name="com.facebook.CustomTabActivity"
                    android:exported="true">
                    <intent-filter>
                        <action android:name="android.intent.action.VIEW" />
                        <category android:name="android.intent.category.DEFAULT" />
                        <category android:name="android.intent.category.BROWSABLE" />
                        <data android:scheme="@string/fb_login_protocol_scheme" />
                    </intent-filter>
                </activity>
                
            3.3.2 在String.xml中添加 fb_login_protocol_scheme。
            
                <string name="fb_login_protocol_scheme">fbAPP_ID</string>
        
        3.4 登录状态
            
            通过检查AccessToken.getCurrentAccessToken()和Profile.getCurrentProfile()判断是否登录。
            
    4 用户信息

        在3.2中,回调onSuccess中执行如下方法:
        
        getLoginInfo(loginResult.getAccessToken());
        
        public void getLoginInfo( AccessToken accessToken ){
            GraphRequest request = GraphRequest.newMeRequest(accessToken, new GraphRequest.GraphJSONObjectCallback() {
                @Override
                public void onCompleted(JSONObject object, GraphResponse response) {
                    if (object != null) {
                        String id = object.optString( "id" ) ;   //比如:1565455221565
                        String name = object.optString( "name" ) ;  //比如:Zhang San
                        String gender = object.optString("gender") ;  //性别:比如 male (男)  female (女)
                        String emali = object.optString("email") ;  //邮箱:比如:56236545@qq.com

                        //获取用户头像
                        JSONObject object_pic = object.optJSONObject( "picture" ) ;
                        JSONObject object_data = object_pic.optJSONObject( "data" ) ;
                        String photo = object_data.optString( "url" )  ;

                        //获取地域信息
                        String locale = object.optString( "locale" ) ;   //zh_CN 代表中文简体

                        Toast.makeText( MainActivity.this , "" + object.toString() , Toast.LENGTH_SHORT).show();
                    }
                }
            }) ;

            Bundle parameters = new Bundle();
            parameters.putString("fields", "id,name,link,gender,birthday,email,picture,locale,updated_time,timezone,age_range,first_name,last_name");
            request.setParameters(parameters);
            request.executeAsync() ;
        }
           

  • 相关阅读:
    Python | PyQt5编写计时器与倒计时应用程序
    AI文件与PS文件相互导入,并分层可编辑
    maple解方程组
    有限元数值分析
    常用Latex编辑数学公式
    notion
    总结一下ANSYS中不同单元之间选择与连接问题
    参考文献的引用方法
    Abaqus CAE笔记本
    几种大文件传输的平台
  • 原文地址:https://www.cnblogs.com/farmerkids/p/5814927.html
Copyright © 2020-2023  润新知