6.8.1 使用ShareSDK 实现第三方分享,登录 微博,

注意weibo要考虑没有客户端的情况和有客户端的情况。


OAuth开放服务访问认证

非常重要的授权协议,很多网站支持qq登录
1:什么是oAuth,开放的,简易的,用户资源授权访问的协议
oAuth 是为第三方访问用户自愿提供服务的协议,不需要密码
oauth.net官方站点
oAuth 协议,可以使一个服务对接多个不同类型的客户端,实现开放API的能力;




常用开放API的服务:
1:http://open.weibo.com/

2:http://open.weixin.qq.com

开放 API-》微博API, 例如抓包的时候抓到的地址 , 这里的API ,其实就应该是我们的请求的网址的格式,就像我们抓包得到的网址一样。
微博API
粉丝服务接口
微博接口
评论接口
用户接口
关系接口
账号接口
收藏接口
搜索接口
提醒接口
短链接口
公共服务接口
位置服务接口
地理信息接口
地图引擎接口
支付接口
OAuth 2.0授权接口

http://open.weibo.com/wiki/Oauth2/authorize


接口文档里面可以按照这个来做。AppKey

1: 使用服务,必须要申请创建应用
2:只有创建的应用,才会创建出来授权的基本信息;
3:开发网站SDK整合或者是网址API的实现。


微连接-》立即接入-》

AppKey 和App Secret 是Oauth必须要有的信息

---------------------------------------------------------------------------------------------

在布局里面添加一个按钮:

<Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onClick="btnShareApp"
        android:text="把软件推荐给好友"/>



mob.com
http://sharesdk.mob.com/#/sharesdk
acc:kodulf.c9


ShareSDK产品介绍
ShareSDK是为iOS、Android的App提供社会化功能的一个组件,开发者仅需10分钟即可集成到自己的App中,它不仅支持国内外40多家的主流社交平台,帮助开发者轻松实现社会化分享、登录、关注、获得用户资料、获取好友列表等主流的社会化功能,还有强大的社会化统计分析管理后台,可以实时了解用户、信息流、回流率、传播效率等数据,有效地指导移动App的日常运营与推广,同时为App引入更多的社会化流量。


ShareSDK:
ShareSDK 封装了例如新浪微波.工厂模式是根据不同的参数返回相同


一个提供SDK,下载的时候,点击选择显示更多社交平台,再选全选。http://sharesdk.mob.com/#/downloadDetail/ShareSDK/android


但是ShareSDK还可以监控 用户的内容,太不安全了。。。


快速集成:
http://wiki.mob.com/android_快速集成指南/
http://dashboard.mob.com/#/main/quickstarts/share/android


按照里面的内容进行执行:

1: 首先java -jar QuickIntegrater.jar


QuickIntegrater

java -jar C:\2016notpatupdate\161217\ShareSDK-Android-2.6.6-4a3490a637045588a3cad4a85b9ec26b\ShareSDK for Android\QuickIntegrater


上面是一键生成工程模版


2: 把cn 和com 放到java 文件夹下面
把res 复制过去
然后拷贝libs,里面的Mob开头的两个jar包是核心jar包。
下面一点非常重要的。++++++++++++++++
Android Studio 工程,一定要注意,不要手动创建assets目录,采用File->New->Folder选择assets.内部
New->Folder->Assets Folder++++++++++++++++++++++



怎么没有渠道打包?


3:添加权限:activity
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.MANAGE_ACCOUNTS"/>
<uses-permission android:name="android.permission.GET_ACCOUNTS"/>


4:http://wiki.mob.com/android_快速集成指南/
上面的
<activity
            android:name="com.mob.tools.MobUIShell"
            android:theme="@android:style/Theme.Translucent.NoTitleBar"
            android:configChanges="keyboardHidden|orientation|screenSize"
            android:screenOrientation="portrait"
            android:windowSoftInputMode="stateHidden|adjustResize" >


            <intent-filter>
                <data android:scheme="tencent100371282" />
                <action android:name="android.intent.action.VIEW" />
                <category android:name="android.intent.category.BROWSABLE" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>


            <!-- 调用新浪原生SDK,需要注册的回调activity -->
            <intent-filter>
                <action android:name="com.sina.weibo.sdk.action.ACTION_SDK_REQ_ACTIVITY" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>



5: 整合的注意事项:

5.1:关于清单文件,当中的activity设置,不要参考官方的快速集成,而是要使用Android集成文档。
5.2:如果使用微信,易信,支付宝分享,那么需要添加特定的activity 并且在清单文件注册
5.3:cn.sharesdk.onkeyshare 提供了一键分享的功能,可以使用
5.4:ShareSDK.xml 包含了所有的分享平台需要配置的KEY,和米亚,必须要配置。


6:官方的一个简单的例子

private void showShare() {
 ShareSDK.initSDK(this);
 OnekeyShare oks = new OnekeyShare();
 //关闭sso授权
 oks.disableSSOWhenAuthorize(); 

// 分享时Notification的图标和文字  2.5.9以后的版本不调用此方法
 //oks.setNotification(R.drawable.ic_launcher, getString(R.string.app_name));
 // title标题,印象笔记、邮箱、信息、微信、人人网和QQ空间使用
 oks.setTitle(getString(R.string.share));
 // titleUrl是标题的网络链接,仅在人人网和QQ空间使用
 oks.setTitleUrl("http://sharesdk.cn");
 // text是分享文本,所有平台都需要这个字段
 oks.setText("我是分享文本");
 // imagePath是图片的本地路径,Linked-In以外的平台都支持此参数
 oks.setImagePath("/sdcard/test.jpg");//确保SDcard下面存在此张图片
 // url仅在微信(包括好友和朋友圈)中使用
 oks.setUrl("http://sharesdk.cn");
 // comment是我对这条分享的评论,仅在人人网和QQ空间使用
 oks.setComment("我是测试评论文本");
 // site是分享此内容的网站名称,仅在QQ空间使用
 oks.setSite(getString(R.string.app_name));
 // siteUrl是分享此内容的网站地址,仅在QQ空间使用
 oks.setSiteUrl("http://sharesdk.cn");


// 启动分享GUI
 oks.show(this);
 }


++++++++++++++++++++++++++++++++++++++
7: 我的例子:

如果不让用户选择,那么使用setPlatform 注意了这里后面要有一个NAME


public void btnShareApp(View view) {
        //TODO : 把软件推荐给好友
        //1.初始化SharedSDK
        ShareSDK.initSDK(this);
        OnekeyShare oks = new OnekeyShare();
        oks.setText("我是分享文本");
        oks.setTitle("Title分享");
        oks.setAddress("宇宙北京");
        //OnekeyShare 有一些自定义的额功能
        //例如,直接使用某个平台进行分享,不需要用户进行选择
        //每一个平台都有一个类定义,直接获取就可以了

        oks.setPlatform(SinaWeibo.NAME);


        oks.show(this);//一定不要忘了这个,不让是不会显示的。
    }
+++++++++++++++++++++++++++++++++++++++++++++、
如果不需要用户该内容应该怎么办呢?oks.setSilent(true);//这个就是设置不允许用户编辑内容,直接静默发送。
++++++++++++++++++++++++++++++++++++++++++++


8:还有顺序,可以修改下面的SorId,
Enable,可以设置是否需要

<SinaWeibo
        Id="1"
        SortId="1"
        AppKey="568898243"
        AppSecret="38a4f8204cc784f81f9f0daaf31e02e3"
        RedirectUrl="http://www.sharesdk.cn"
        ShareByAppClient="false"
        Enable="true" />


9:现在如果想要把我们的app 变成自己的app 的名字。那么修改
AppKey
AppSecret

注意新浪微博需要自己申请应用,然后下载它的签名工具才能得到签名,生成了签名才能使用。



10:ShareSDK.xml中包含了每一种平台的信息,默认在发布微博以后后面都是显示从shareSDK上发布的

key
secret 替换好了。
AppKey="1870193465"
        AppSecret="cee0ccf2683d137fb28a5b8569c8fa81"


授权回调页面:
https://api.weibo.com/oauth2/default.html
<SinaWeibo
        Id="1"
        SortId="1"
        AppKey="1870193465"
        AppSecret="cee0ccf2683d137fb28a5b8569c8fa81"
        RedirectUrl="https://api.weibo.com/oauth2/default.html"
        ShareByAppClient="false"
        Enable="true" />


11:但是对于自己申请的sina微博API,客户端必须要进行软件包的签名获取,才可以正常的授权。

buildType
在开发之前需要团队同意KeyStore 文件,用于软件包的打包。只有这样之后,每个人才能测相同的新浪微博。
创建一个KeySotre 文件就行了。

需要考虑debug 和release 的区别。
下载新浪微博签名工具。安装到测试手机上面,检测制定包名的程序的签名,才能申请。
--------------------------------------
Android 签名文件,使用Build ------
--------------------------------------
之后控制我们的签名F4,配置Signing。
Build Types 里面设置Sign 
debug 和release 都是它。



12:将shareSDK 形成Gradle 的Model。

——————————————————————————————————
13: http://wiki.mob.com/第三方登录/
____________________________________
public class MainActivity extends AppCompatActivity {


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //1.初始化SharedSDK,初始化一次就行了。
        ShareSDK.initSDK(this);
    }


    public void btnShareApp(View view) {
        //TODO : 把软件推荐给好友
        OnekeyShare oks = new OnekeyShare();
        oks.setText("我是分享文本");
        oks.setTitle("Title分享");
        oks.setAddress("宇宙北京");
        //OnekeyShare 有一些自定义的额功能
        //例如,直接使用某个平台进行分享,不需要用户进行选择
        //每一个平台都有一个类定义,直接获取就可以了
        oks.setPlatform(SinaWeibo.NAME);
        oks.setSilent(true);//这个就是设置不允许用户编辑内容,直接静默发送。


        oks.show(this);
    }


    public void btnLogin(View view) {
        //第三放登录,其实就是获取第三方用户的信息,包含唯一标识。
        //获取制定的平台
        //http://wiki.mob.com/第三方登录/



        Platform platform=ShareSDK.getPlatform(SinaWeibo.NAME);
        PlatformDb db = platform.getDb();//获取制定平台授权用户的信息的数据.
        String token = db.getToken();//获取用户授权的Token,可能取到,也可能取不到。
        String userName = db.getUserName();//
        String userId = db.getUserId();//
        Log.d("Kodulf","UseToken"+token);
        Log.d("Kodulf","UseName"+userName);
        Log.d("Kodulf","UseId"+userId);
        //TODO 获取用户授权 调用authorize 就可以了
        //TODO 获取用户信息 调用showUser 就可以了
        
    }
}


第三方登录有两种情况:


1:要数据 ,不要功能,就是把 用户的 信息取过来然后自动创建用户。
2:要功能,不要数据,内涵段子,你可以用新浪微博来分享出去,




//代表用户重来没有登录过新浪微博,需要授权
//授权之前 需要设置监听器。


SSO 如果你有新浪微博客户端登录了就用新浪微博客户端




package com.example.kodulf.qinqinkodulf;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;

import java.util.HashMap;

import cn.sharesdk.framework.Platform;
import cn.sharesdk.framework.PlatformActionListener;
import cn.sharesdk.framework.PlatformDb;
import cn.sharesdk.framework.ShareSDK;
import cn.sharesdk.onekeyshare.OnekeyShare;
import cn.sharesdk.sina.weibo.SinaWeibo;

public class MainActivity extends AppCompatActivity implements PlatformActionListener {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //1.初始化SharedSDK,初始化一次就行了。
        ShareSDK.initSDK(this);
    }

    public void btnShareApp(View view) {
        //TODO : 把软件推荐给好友
        OnekeyShare oks = new OnekeyShare();
        oks.setText("我是分享文本");
        oks.setTitle("Title分享");
        oks.setAddress("宇宙北京");
        //OnekeyShare 有一些自定义的额功能
        //例如,直接使用某个平台进行分享,不需要用户进行选择
        //每一个平台都有一个类定义,直接获取就可以了
        oks.setPlatform(SinaWeibo.NAME);
        oks.setSilent(true);//这个就是设置不允许用户编辑内容,直接静默发送。

        oks.show(this);
    }

    public void btnLogin(View view) {
        //第三放登录,其实就是获取第三方用户的信息,包含唯一标识。
        //获取制定的平台
        //http://wiki.mob.com/第三方登录/

        Platform platform=ShareSDK.getPlatform(SinaWeibo.NAME);
        PlatformDb db = platform.getDb();//获取制定平台授权用户的信息的数据.
        String token = db.getToken();//获取用户授权的Token,可能取到,也可能取不到。
        String userName = db.getUserName();//
        String userId = db.getUserId();//
        Log.d("Kodulf","UseToken"+token);
        Log.d("Kodulf","UseName"+userName);
        Log.d("Kodulf","UseId"+userId);
        //TODO 获取用户授权 调用authorize 就可以了
        //TODO 获取用户信息 调用showUser 就可以了

        if(TextUtils.isEmpty(userId)){
            //代表用户重来没有登录过新浪微博,需要授权
            //授权之前 需要设置监听器。
            platform.setPlatformActionListener(this);
//            platform.authorize();
            platform.showUser(null);
        }
    }

    /**
     * 平台操作成功了
     * @param platform
     * @param i    操作的类型 是授权还是获取用户还是分享,都是通过这个i 来区分
     * @param hashMap
     */
    @Override
    public void onComplete(Platform platform, int i, HashMap<String, Object> hashMap) {
        if(i==Platform.ACTION_AUTHORIZING){
            //当前操作是授权的情况
            Log.d("Kodulf","hashMap="+hashMap);
            //通过platform 获取授权的用户了
        }else if(i==Platform.ACTION_USER_INFOR){
            Log.d("Kodulf","hashMap="+hashMap);
        }
    }

    @Override
    public void onError(Platform platform, int i, Throwable throwable) {

    }

    @Override
    public void onCancel(Platform platform, int i) {

    }
}





扩展:
1:ShareSDK的模块
2:微信分享
3:友盟的分享操作;



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值