注意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:友盟的分享操作;