转自 http://blog.csdn.net/qq_32120667/article/details/74286619 写的非常清晰,很不错

现在国内大部分APP应用都集成了第三方登录和社会化分享,主要都是为了方便用户使用软件的同时又宣传推广应用。而市面上大多数的主流的软件都开放了第三方登录和社会化分享,假如每一个平台都一个一个地去集成,可能就太消耗时间和加大了工作量,好在这种登录和分享功能已经有第三方平台帮我们做好了,我们直接调用其SDK即可。国内用的比较多的就是Mob和友盟,这里我们以mob为例。

首先官网地址是:http://www.mob.com/ 
当然只有注册了用户,才可以创建应用,使用第Mob平台提供的第三方登录和社会化分享工具。好了不废话,进入正题。

第一步登录官网首页 
点击右侧头像栏那里,选择进入后台,选择ShareSDK,立即使用并创建名为MobShareSDKDemo的Android应用。 
获取创建应用成功后的APP Key和 APP Secret。 

点击下方链接下载SDK。 
http://www.mob.com/#/downloadDetail/ShareSDK/android 
这里我们以QQ,微信,新浪微博为例,仅需要下载相对应的集成文档即可。 
下载完成后是一个压缩包,解压之后有两个文件夹,一个是ShareSDK for android ApiDoc,顾名思义就是一个api文档。另外一个是ShareSDK for Android,这里我们打开这个文件夹,这里面包含分享的源码和所需要的资源文件和jar包。如下图: 

第二步去各大社交平台继续注册应用 
这里我们以QQ,微信,微博为例,所以需要到相应的开发平台进行注册,跟Mob平台同一个道理,只有注册完之后才能进行py交易,欧不,是进行第三方平台登录和社会化分享。

1.腾讯开放平台 
申请地址: http://open.qq.com/ 
如果没有在腾讯开放平台注册过开发者信息,需要先注册完后,待开发者信息审核通过,我们实际项目应用才能上线。否则会受到腾讯平台的限制。以下微信,微博同理。

来到开放平台首页,找到“应用接入”—>”创建移动应用”—>“移动应用 安卓”—>创建应用后“完善信息”—>保存腾讯开放平台提供给我们的APP ID和APP KEY 

应用信息填写完整,这里我们仅仅是演示demo,把有的信息填上去即可,没有的不填也没有关系,最后保存应用信息。然后点击“管理中心”来到管理中心页面,找到未上线的项目MobShareSDKDemo,点进去,进入我们Demo的详情页。由于这里我们需要做到QQ登录,所以我们需要在基础服务那一栏里找到“QQ登录”,添加应用调试者信息。其实说白了就是添加几个qq号码,在调试的时候可以使用。 

2.微信开放平台 
申请地址: https://open.weixin.qq.com/ 
来到微信开放平台首页,在标题栏找到“管理中心”—>”创建移动应用”—>“填写基本信息”—>“填写平台信息”

※ 这里需要注意的是应用签名这一栏,在实际项目开发过程中,应用签名需要先使用签名文件生成apk包安装到手机上,再根据签名生成工具获得应用签名。

studio如何生成签名文件,可以戳下面这个链接: 
Android Studio生成签名工具,自动签名,以及生成SHA1和MD5的值

下载签名生成工具请戳下面这个链接: 
https://open.weixin.qq.com/zh_CN/htmledition/res/dev/download/sdk/Gen_Signature_Android.apk 
最后得到的应用签名如下,填写完信息,微信需要审核,审核时间为7天左右,但实际审核一般几天就能通过,不过在实际开发过程中,最好还是提前申请注册应用信息。 

3.新浪微博开放平台 
申请地址:http://open.weibo.com/ 
来到新浪微博开放平台首页,在找到“移动应用”—>”立即接入”—>“创建新应用”—>填写完应用名称,选择Android平台即可 
在应用信息中“基本信息”可以找到我们需要接下来填入到ShareSDK.xml中的App Key、App Secret 

※ 这里需要注意的是我们需要在“高级信息”中填写OAuth2.0 授权设置回调地址。否则会报一个redirect_uri_mismatch的错误信息 

※ 同时要注意的是我们需要在“基本信息”中编辑应用基本信息。我们可以填3套对应包名签名应用信息。这里,包名都一样(com.donkor.demo.mobsharesdk),我们填写两套Android签名即可,一个根据debug.apk安装上去根据包名获取。一个根据对应的签名文件安装到手机上的release.apk获得。第一个是方便我们在调试的过程中测试,第二个则是方便我们项目上线时使用。新浪微博要求的其他应用基本信息必须填写的,根据要求把他填写完整,保存即可。 

※ 应用信息没有提交审核。想要测试的话,还需要添加测试账号信息。否则会报一个号码403的 applications over the unaudited use restrictions!错误。 

文件不存在(C8998)的错误,同样经常出现。原因可能是台上的包名和签名与应用的不相同,或者是OAuth2.0授权设置中设置你的回调地址与应用内调用的不同。

第三步配置信息与使用 
1.打开studio新建MobShareSDKDemo的项目 
2.依赖所需要的jar包和新建一个assets文件夹放入ShareSDK.xml 
3.将上面下载下来,解压出来的SDK中ShareSDK for Android\Libs\OneKeyShare\src目录下的源码直接拷贝到项目中 
 
4.这里由于使用到了微信,所以需要新建wxapi目录再放置WXEntryActivity(这里的目录名和类名必须遵从微信的要求) 
 
WXEntryActivity.Java的代码如下:

/** 官网地站:http://www.mob.com* 技术支持QQ: 4006852216* 官方微信:ShareSDK   (如果发布新版本的话,我们将会第一时间通过微信将版本更新内容推送给您。如果使用过程中有任何问题,也可以通过微信与我们取得联系,我们将会在24小时内给予回复)** Copyright (c) 2013年 mob.com. All rights reserved.*/package com.donkor.demo.mobsharesdk.wxapi;import android.content.Intent;
import android.widget.Toast;
import cn.sharesdk.wechat.utils.WXAppExtendObject;
import cn.sharesdk.wechat.utils.WXMediaMessage;
import cn.sharesdk.wechat.utils.WechatHandlerActivity;/** 微信客户端回调activity示例 */
public class WXEntryActivity extends WechatHandlerActivity {/*** 处理微信发出的向第三方应用请求app message* <p>* 在微信客户端中的聊天页面有“添加工具”,可以将本应用的图标添加到其中* 此后点击图标,下面的代码会被执行。Demo仅仅只是打开自己而已,但你可* 做点其他的事情,包括根本不打开任何页面*/public void onGetMessageFromWXReq(WXMediaMessage msg) {if (msg != null) {Intent iLaunchMyself = getPackageManager().getLaunchIntentForPackage(getPackageName());startActivity(iLaunchMyself);}}/*** 处理微信向第三方应用发起的消息* <p>* 此处用来接收从微信发送过来的消息,比方说本demo在wechatpage里面分享* 应用时可以不分享应用文件,而分享一段应用的自定义信息。接受方的微信* 客户端会通过这个方法,将这个信息发送回接收方手机上的本demo中,当作* 回调。* <p>* 本Demo只是将信息展示出来,但你可做点其他的事情,而不仅仅只是Toast*/public void onShowMessageFromWXReq(WXMediaMessage msg) {if (msg != null && msg.mediaObject != null&& (msg.mediaObject instanceof WXAppExtendObject)) {WXAppExtendObject obj = (WXAppExtendObject) msg.mediaObject;Toast.makeText(this, obj.extInfo, Toast.LENGTH_SHORT).show();}}}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52

5.配置相应的权限和注册所需要的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"/>
<!-- 蓝牙分享所需的权限,不需要用到的话可以省略 -->
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
<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><!-- ※这里需要将1105785901改成你在腾讯申请后得到的AppId--><data android:scheme="tencent1105785901" /><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><!--微信分享回调 -->
<activity
    android:name=".wxapi.WXEntryActivity"android:theme="@android:style/Theme.Translucent.NoTitleBar"android:configChanges="keyboardHidden|orientation|screenSize"android:exported="true"android:screenOrientation="portrait" />
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29

6.修改ShareSDK.xml文件 
这里我们以新浪微博,QQ为例。微信因为没有审核通过,所以没办法验证。想验证的话,需要在微信平台填写完清晰,完整的信息,提交审核通过之后即可,修改的过程同下。

 <!-- 修改成你在sharesdk后台注册的应用的appkey"-->
<ShareSDK
    AppKey = "1985fae01629d"/><SinaWeibo
    Id="2"SortId="2"AppKey="2022241043"AppSecret="6e22ea802d34e493d6663294bd7597a0 "RedirectUrl="http://blog.csdn.net/donkor_"ShareByAppClient="true"Enable="true" />
<QQ
    Id="7"SortId="7"AppId="1105785901"AppKey="k2sXKmeDIqrjpLO4"BypassApproval="true"ShareByAppClient="true"Enable="true"/>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

7.添加分享代码

ShareSDK.initSDK(MainActivity.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("分享标题");
// titleUrl是标题的网络链接,仅在人人网和QQ空间使用
oks.setTitleUrl("http://blog.csdn.net/donkor_");
// text是分享文本,所有平台都需要这个字段
oks.setText("分享文本内容");
// imagePath是图片的本地路径,Linked-In以外的平台都支持此参数
// oks.setImagePath("/sdcard/test.jpg");//
// 确保SDcard下面存在此张图片
oks.setImageUrl("https://img-blog.csdn.net/20161115193036196");
// url仅在微信(包括好友和朋友圈)中使用
oks.setUrl("http://blog.csdn.net/donkor_");
// comment是我对这条分享的评论,仅在人人网和QQ空间使用
//oks.setComment("");
// site是分享此内容的网站名称,仅在QQ空间使用
oks.setSite(getString(R.string.app_name));
// siteUrl是分享此内容的网站地址,仅在QQ空间使用
//oks.setSiteUrl(getString(R.string.settingShareSiteUrl));
// 启动分享GUI
oks.show(MainActivity.this);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

8.添加第三方登录代码

//初始化
ShareSDK.initSDK(this);
  • 1
  • 2
  • 1
  • 2
//执行授权,获取用户信息
private void authorize(Platform plat) {if (plat.isValid()) {String userId = plat.getDb().getUserId();if (!TextUtils.isEmpty(userId)) {UIHandler.sendEmptyMessage(MSG_USERID_FOUND, this);login(plat.getName(), userId, null);return;}}plat.setPlatformActionListener(MainActivity.this);//true不使用SSO授权,false使用SSO授权plat.SSOSetting(false);plat.showUser(null);
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
//发送登陆信息
private void login(String plat, String userId, HashMap<String, Object> userInfo) {Message msg = new Message();msg.what = MSG_LOGIN;msg.obj = plat;UIHandler.sendMessage(msg, this);
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

UIHandler需要实现接口,并实现其中的方法

@Override
public boolean handleMessage(Message msg) {switch (msg.what) {case MSG_USERID_FOUND: {Toast.makeText(this, R.string.userid_found, Toast.LENGTH_SHORT).show();}break;case MSG_LOGIN: {String text = getString(R.string.logining, msg.obj);Toast.makeText(this, text, Toast.LENGTH_SHORT).show();}break;case MSG_AUTH_CANCEL: {Toast.makeText(this, R.string.auth_cancel, Toast.LENGTH_SHORT).show();}break;case MSG_AUTH_ERROR: {Toast.makeText(this, R.string.auth_error, Toast.LENGTH_SHORT).show();}break;case MSG_AUTH_COMPLETE: {Toast.makeText(this, R.string.auth_complete, Toast.LENGTH_SHORT).show();}break;}return false;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

plat.setPlatformActionListener(MainActivity.this)设置监听,需要实现它的三个方法:

  • onCancel 取消
  • onComplete 完成
  • onError 异常
@Override
public void onComplete(Platform platform, int action, HashMap<String, Object> res) {if (action == Platform.ACTION_USER_INFOR) {//登录成功,获取需要的信息UIHandler.sendEmptyMessage(MSG_AUTH_COMPLETE, this);login(platform.getName(), platform.getDb().getUserId(), res);Log.e("asd", "platform.getName():" + platform.getName());Log.e("asd", "platform.getDb().getUserId()" + platform.getDb().getUserId());String openid = platform.getDb().getUserId() + "";String gender = platform.getDb().getUserGender();String head_url = platform.getDb().getUserIcon();String nickname = platform.getDb().getUserName();Log.e("asd", "openid:" + openid);Log.e("asd", "gender:" + gender);Log.e("asd", "head_url:" + head_url);Log.e("asd", "nickname:" + nickname);}
}@Override
public void onError(Platform platform,int action,Throwable t){if(action==Platform.ACTION_USER_INFOR){UIHandler.sendEmptyMessage(MSG_AUTH_ERROR,this);}t.printStackTrace();
}@Override
public void onCancel(Platform platform, int action) {if (action == Platform.ACTION_USER_INFOR) {UIHandler.sendEmptyMessage(MSG_AUTH_CANCEL, this);}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34

清除第三方登录,分享的信息与缓存

Platform qq = ShareSDK.getPlatform(MainActivity.this, QQ.NAME);
Platform wechat = ShareSDK.getPlatform(MainActivity.this, Wechat.NAME);
Platform weibo = ShareSDK.getPlatform(MainActivity.this, SinaWeibo.NAME);
if (qq.isValid()) {qq.removeAccount();
}
if (wechat.isValid()) {wechat.removeAccount();
}
if (weibo.isValid()) {weibo.removeAccount();
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

string.xml

<string name="userid_found">用户信息已存在,正在跳转登录操作…</string>
<string name="logining">使用%s帐号登录中…</string>
<string name="auth_cancel">授权操作已取消</string>
<string name="auth_error">授权操作遇到错误,请阅读Logcat输出</string>
<string name="auth_complete">授权成功,正在跳转登录操作…</string>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 1
  • 2
  • 3
  • 4
  • 5

布局activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:background="@android:color/white"android:orientation="vertical"><LinearLayout
        android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginLeft="20dp"android:layout_marginRight="20dp"android:layout_marginTop="50dp"android:orientation="horizontal"><View
            android:layout_width="0dp"android:layout_height="0.3dp"android:layout_marginTop="10dp"android:layout_weight="1"android:background="@android:color/black" /><TextView
            android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginLeft="30dp"android:layout_marginRight="30dp"android:text="第三方账号登录"android:textSize="14sp" /><View
            android:layout_width="0dp"android:layout_height="0.3dp"android:layout_marginTop="10dp"android:layout_weight="1"android:background="@android:color/black" /></LinearLayout><LinearLayout
        android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginTop="20dp"android:gravity="center"android:orientation="horizontal"><ImageView
            android:id="@+id/ivQQ"android:layout_width="100dp"android:layout_height="100dp"android:layout_marginLeft="10dp"android:layout_marginRight="10dp"android:background="@drawable/img_qq" /><ImageView
            android:id="@+id/ivWeChat"android:layout_width="100dp"android:layout_height="100dp"android:layout_marginLeft="10dp"android:layout_marginRight="10dp"android:background="@drawable/img_wechat" /><ImageView
            android:id="@+id/ivSinaWeibo"android:layout_width="100dp"android:layout_height="100dp"android:layout_marginLeft="10dp"android:layout_marginRight="10dp"android:background="@drawable/img_weibo" /></LinearLayout><Button
        android:id="@+id/btnRemoveMsg"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="退出第三方登录数据信息"android:layout_margin="30dp"/><Button
        android:id="@+id/btnShare"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="社会化分享"android:layout_margin="30dp"/>
</LinearLayout>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88

视频演示效果: 
视频链接地址

CSDN下载地址 : http://download.csdn.net/detail/donkor_/9700844

Mob第三方登录快速集成开发相关推荐

  1. php 微信第三方登录demo,第三方登录 - 快速接入微信、QQ、微博等第三方登录方式 – 基于ThinkPHP和Bootstrap的极速后台开发框架...

    此插件基于FastAdmin和Thinkphp5开发的第三方登录插件,可用于对接微.微博.QQ等第三方登录,目前CMS中的小程序账号登录绑定就是基于此插件开发,在使用CMS中的小程序登录功能之前请务必 ...

  2. OAuth2第三方登录快速接入

    前言:现在很多网站和App都支持第三方登录功能,这里以GitHub第三方登录举例,因为注册应用申请ID比微信和QQ简单.目前市面上主流的第三方登录协议就是 OAuth2.0, 例如 QQ,微信,微博等 ...

  3. 基于唐桥实时音视频SDK,快速集成开发一套远程会诊系统

    前言:本文将详解如何基于唐桥实时音视频sdk,开发一款具有视频标注,多流视频,1080P高清音视频通话,实时影像传输等功能的实时通信应用.搭载注册登录,病人会诊资料呈现等医院端业务功能,即可完成一套远 ...

  4. js 快速集成开发:easyui 时间控件格式化

    例如: 申明变量: <td align="center" width="80px" height="35px">申请日期起:&l ...

  5. React Native 集成分享第三方登录功能分享第三方登录模块开发(iOS)

    期待已久的新课上线啦!解锁React Native开发新姿势,一网打尽React Native最新与最热技术,点我Get!!! 在我们常用的App中经常会看到分享与第三方登录的功能,可以说分享与第三方 ...

  6. Spring Boot开发之使用JustAuth组件实现第三方登录(QQ、微博等)

    在我们的项目开发中,使用第三方登录(如QQ登录.微信登录等)可以更加方便.轻松地实现用户登录. 在以往的开发过程中,如果要使项目实现第三方登录功能,一般过程是阅读官网的开发文档,并下载其JDK(或者依 ...

  7. shareSDK社会化分享快速集成

    几乎所有的APP上都有分享功能 ,用户希望把自己所见所得告诉身边好友或是其它的用户,App开发者更加希望可以通过分享让更多的人知道我的应用,让更多的人来使用我们的应用.所以分享功能就成为了我们开发AP ...

  8. 第三方登录如何给前台返回token_如何设计优雅的第三方账号登录?

    # 前言 在互联网应用中,我们构建一个网站或APP,如果没有用户,那就没有价值.所以,如何吸引用户注册和登录,是一个重要问题,而这就涉及到账号体系了. 在应用构建初期,用户量较少,那么自建系统的账号体 ...

  9. joomla QQ登录,微信登录,微博登陆,人人登陆,明道登录的第三方登录

    在joomla网站上集成QQ,微信,支付宝,人人,明道,短信,微博登录现在已经成为可能.只需要安装ZMAX程序人开发的ZMAX第三方登录组件,一键就可以让你的网站轻松集成当前流行的第三方登录. 国产开 ...

最新文章

  1. IDEA小技巧:Debug条件断点
  2. python一次性读取整个文件-使用Python读取大文件的方法
  3. 最新版本sublime text3注册码
  4. LINUX BASH SHELL,小小学习一下
  5. (文档挂起)打印机为什么打印失败?
  6. Linux进程间通信之管道(pipe)、命名管道(FIFO)与信号(Signal)
  7. 洛谷P1447 [NOI2010]能量采集(容斥)
  8. UDP传输 TCP传输
  9. echarts入门基础教程
  10. excel公式不执行。原因是设置问题:公式->计算选项->手动
  11. 100个RPA经典应用场景解析
  12. [ATF] ARM Trusted firmware 构建选项
  13. 软工学子与你一起了解资金时间价值 之 复利(利滚利)+ 贷款的基本常识 + 现金流量图 ——《工程经济学》
  14. 李子柒重回大众视野,拿回商标
  15. VINS_FUSION
  16. 现在有什么地推项目_市场推广中谈到地推,地推是什么意思?
  17. A站 的 Swift 实践 —— 上篇
  18. windows自带截图工具
  19. ClassFinal对项目进行加密处理
  20. 基于JavaWeb的汽车租赁管理系统

热门文章

  1. 股市里赚钱最快的是什么股?有些股票的机会来了!
  2. Win10s分屏设置
  3. Js 获取当前时间上一个月 YYYY-mm
  4. Lecture 3 Bit Hacks
  5. 打包部署后无法读取jar包里的文件(实测可行,Java中读取jar包中的文件)
  6. 《谁说菜鸟不会数据分析》学习笔记 第一章总览 第二章数据分析思路
  7. 女双中后场常用技术及训练方法[技术解码]
  8. 这就是2020:全球云计算十一大年度话题盘点
  9. uniapp安卓端禁止截屏允许截屏
  10. ros语音识别:pocketsphinx_continuous工作正常而gst-pocketsphinx不能识别相同语音的问题。