zoukankan      html  css  js  c++  java
  • 集成ShareSdk一键分享和第三方登录

    在Mob官网http://mob.com/注册,创建应用,下载SDK,申请APP_key

    根据官网开发指南导入SDK到你的项目中:

    在assets/ShareSDk.xml中修改你的APP_key

    package com.loaderman.thirdpartylogindemo;
    
    import android.content.Intent;
    import android.os.Bundle;
    import android.support.v7.app.AppCompatActivity;
    import android.view.View;
    
    import java.util.HashMap;
    
    import cn.sharesdk.framework.Platform;
    import cn.sharesdk.framework.PlatformActionListener;
    import cn.sharesdk.framework.ShareSDK;
    import cn.sharesdk.onekeyshare.OnekeyShare;
    import cn.sharesdk.tencent.qq.QQ;
    
    public class MainActivity extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            //需要进行初始化
            ShareSDK.initSDK(this);
        }
        public void showShare(View view) {
            OnekeyShare oks = new OnekeyShare();
            //关闭sso授权
            oks.disableSSOWhenAuthorize();
            // title标题,印象笔记、邮箱、信息、微信、人人网、QQ和QQ空间使用
            oks.setTitle("标题");
            // titleUrl是标题的网络链接,仅在Linked-in,QQ和QQ空间使用
            oks.setTitleUrl("http://sharesdk.cn");
            // text是分享文本,所有平台都需要这个字段
            oks.setText("我是分享文本");
            //分享网络图片,新浪微博分享网络图片需要通过审核后申请高级写入接口,否则请注释掉测试新浪微博
            oks.setImageUrl("http://f1.sharesdk.cn/imgs/2014/02/26/owWpLZo_638x960.jpg");
            // imagePath是图片的本地路径,Linked-In以外的平台都支持此参数
            //oks.setImagePath("/sdcard/test.jpg");//确保SDcard下面存在此张图片
            // url仅在微信(包括好友和朋友圈)中使用
            oks.setUrl("http://sharesdk.cn");
            // comment是我对这条分享的评论,仅在人人网和QQ空间使用
            oks.setComment("我是测试评论文本");
            // site是分享此内容的网站名称,仅在QQ空间使用
            oks.setSite("ShareSDK");
            // siteUrl是分享此内容的网站地址,仅在QQ空间使用
            oks.setSiteUrl("http://sharesdk.cn");
            // 启动分享GUI
            oks.show(this);
        }
        public void showLogin(View view){
            Platform qq = ShareSDK.getPlatform(QQ.NAME);
            //回调信息,可以在这里获取基本的授权返回的信息,但是注意如果做提示和UI操作要传到主线程handler里去执行
            qq.setPlatformActionListener(new PlatformActionListener() {
    
                @Override
                public void onError(Platform arg0, int arg1, Throwable arg2) {
                    // TODO Auto-generated method stub
                    arg2.printStackTrace();
                }
    
                @Override
                public void onComplete(Platform arg0, int arg1, HashMap<String, Object> arg2) {
                    // TODO Auto-generated method stub
                    //输出所有授权信息
                    arg0.getDb().exportData();
                    startActivity(new Intent(MainActivity.this, EnterActivity.class));
                }
    
                @Override
                public void onCancel(Platform arg0, int arg1) {
                    // TODO Auto-generated method stub
    
                }
            });
            //authorize与showUser单独调用一个即可
            qq.authorize();//单独授权,OnComplete返回的hashmap是空的
            qq.showUser(null);//授权并获取用户信息
            //移除授权
            //weibo.removeAccount(true);
        }
    }
    

     activity_main.xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout
        android:orientation="vertical"
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/activity_main"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context="com.loaderman.thirdpartylogindemo.MainActivity">
    
        <Button
            android:onClick="showShare"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="一键分享"/>
        <Button
            android:onClick="showLogin"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="第三方QQ授权登录"/>
    
    </LinearLayout>
    

     在创建一个EndterActivity模拟授权后进入登录主页面

    效果需要在真机演示即可


    注意事项:

    1.微信不能分享的问题解决:

    在assets/ShareSDk.xml中将微信相关节点的的一个属性修改为:

    
    
    BypassApproval="true"
    
    
    

     2.第三方登录的时候需要在授权的APP开发平台申请对应的APP_key,填入assets/ShareSDk.xml到对应的节点AppKey属性中即可,否则会使用默认的APP信息,如美的厨房的图标,本文中只是简单实现,

    根据官网开发中具体步骤:

    1、用户触发第三方登录事件
    2、showUser(null)请求授权用户的资料(这个过程中可能涉及授权操作)
    3、如果onComplete()方法被回调,将其参数Hashmap代入你应用的Login流程
    4、否则提示错误,调用removeAccount(true)方法,删除可能的授权缓存数据
    5、Login时客户端发送用户资料中的用户ID给服务端
    6、服务端判定用户是已注册用户,则引导用户进入系统,否则返回特定错误码
    7、客户端收到“未注册用户”错误码以后,代入用户资料到你应用的Register流程
    8、Register时在用户资料中挑选你应用的注册所需字段,并提交服务端注册
    9、服务端完成用户注册,成功则反馈客户端引导用户进入系统
    10、否则提示错误,调用removeAccount(true)方法,删除可能的授权缓存数据


  • 相关阅读:
    JavaScript 闭包(转)
    JavaScript 获取键盘扫描码
    前台网站优化方案
    设计模式之装饰者模式
    设计模式之蝇量模式
    设计模式之策略模式
    Algorithm学习之any_of
    Algorithm学习之all_of学习
    Algorithm学习之adjacent_find学习
    数据结构-表达式求值
  • 原文地址:https://www.cnblogs.com/loaderman/p/6528159.html
Copyright © 2011-2022 走看看