您的位置:首页 > 其它

第三方登陆,分享以及短信验证码

2016-08-11 19:25 225 查看
本次记录的是在android studio中集成sharesdk的环境。又需要在新项目里面集成sharesdk的第三方登陆,分享,以及短信验证码,索性就记录下吧。首先需要吐槽下mob,as都这么大势所趋了,还以ec为项目结构,需要集成sharesdk环境的话还需要我们一个个去赋值粘贴。果断差评有木有

一、分享



大概是这些地方,如果你的as报错的话,建议使用必杀招,重启as。我就遇到了这么坑爹的问题,昨天怎么都保存,今天早上一来就没错了,总结了下,as抽筋了。

需要在你的清单文件androidmainfest中的application中加入以下代码

<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>

<!--微信分享回调 -->
<activity
android:name="cn.sharesdk.demo.wxapi.WXEntryActivity"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:configChanges="keyboardHidden|orientation|screenSize"
android:exported="true"
android:screenOrientation="portrait" />
<activity android:name=".MainActivity">


然后基本的mob环境就已经有了。那么我建议你先了解下你这个应用需要在哪些平台分享,然后去mob网站集成。

然后分享这部分就跟ec的都一样了,对,就是这个方法

protected void shareShow(){
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("标题");
// 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);
}


二、第三方登陆

首先你已经有了sharesdk的环境了,只需要调用里面的对应方法就可以了。一般来说就是qq登陆,微信登陆,微博登陆。

package com.qh.banya.activity;

import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.Toast;

import com.qh.banya.R;

import java.util.HashMap;

import cn.sharesdk.framework.Platform;
import cn.sharesdk.framework.PlatformActionListener;
import cn.sharesdk.framework.ShareSDK;
import cn.sharesdk.sina.weibo.SinaWeibo;
import cn.sharesdk.tencent.qq.QQ;
import cn.sharesdk.wechat.friends.Wechat;

/**
* Created by zsj on 2016/8/10.
*/
public class LoginFragment extends Fragment implements OnClickListener, PlatformActionListener, Handler.Callback {

private View view;
private ImageView ivWeixin;//微信登陆
private ImageView ivQq;//qq登陆
private ImageView ivWeibo;//微博登陆
private Handler handler;//定义handler进行登陆结果的回调
private static final String TAG = "LoginFragment";
private static final int MSG_AUTH_CANCEL = 2;
private static final int MSG_AUTH_ERROR = 3;
private static final int MSG_AUTH_COMPLETE = 4;

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
view = inflater.inflate(R.layout.fragment_login, container, false);
initView();
initData();
return view;
}

private void initView() {
ivWeixin = (ImageView) view.findViewById(R.id.iv_weixin);
ivWeixin.setOnClickListener(this);
ivQq = (ImageView) view.findViewById(R.id.iv_qq);
ivQq.setOnClickListener(this);
ivWeibo = (ImageView) view.findViewById(R.id.iv_weibo);
ivWeibo.setOnClickListener(this);
}

private void initData() {
// 初始化SDK
ShareSDK.initSDK(getActivity());
//注册handler
handler = new Handler(this);
}

@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.iv_qq:
// QQ
Platform qzone = ShareSDK.getPlatform(QQ.NAME);
authorize(qzone);
break;
case R.id.iv_weixin:
// 微信登录
// 测试时,需要打包签名;sample测试时,用项目里面的demokey.keystore
// 打包签名apk,然后才能产生微信的登录
Platform wechat = ShareSDK.getPlatform(Wechat.NAME);
authorize(wechat);
break;
case R.id.iv_weibo:
// 新浪微博
Platform sina = ShareSDK.getPlatform(SinaWeibo.NAME);
authorize(sina);
break;
}

}

// 执行授权,获取用户信息
// 文档:http://wiki.mob.com/Android_%E8%8E%B7%E5%8F%96%E7%94%A8%E6%88%B7%E8%B5%84%E6%96%99
private void authorize(Platform plat) {
plat.setPlatformActionListener(this);
// 关闭SSO授权
plat.SSOSetting(true);
plat.showUser(null);
}

@Override
public void onComplete(Platform platform, int action, HashMap<String, Object> hashMap) {
if (action == Platform.ACTION_USER_INFOR) {
Message msg = new Message();
msg.what = MSG_AUTH_COMPLETE;
msg.obj = new Object[] { platform.getName(), hashMap};
handler.sendMessage(msg);
}
}

@Override
public void onError(Platform platform, int action, Throwable throwable) {
if (action == Platform.ACTION_USER_INFOR) {
handler.sendEmptyMessage(MSG_AUTH_ERROR);
}
throwable.printStackTrace();
}

@Override
public void onCancel(Platform platform, int action) {
if (action == Platform.ACTION_USER_INFOR) {
handler.sendEmptyMessage(MSG_AUTH_CANCEL);
} else {
Log.e(TAG, action + "");
}

}

/**
* 对第三方登陆结果进行回调
*
* @param message
* @return
*/
@Override
public boolean handleMessage(Message message) {
switch (message.what) {
case MSG_AUTH_CANCEL: {
// 取消授权
Toast.makeText(getActivity(), "授权操作已取消", Toast.LENGTH_SHORT).show();
}
break;
case MSG_AUTH_ERROR: {
// 授权失败
Toast.makeText(getActivity(), "授权操作遇到错误,请阅读Logcat输出; \n 如微信登录,需要微信客户端",
Toast.LENGTH_SHORT).show();
}
break;
case MSG_AUTH_COMPLETE: {
// 授权成功
Toast.makeText(getActivity(), "授权成功,正在跳转登录操作…", Toast.LENGTH_SHORT).show();
Object[] objs = (Object[]) message.obj;
String platform = (String) objs[0];
//授权成功后取到的资源
HashMap<String, Object> res = (HashMap<String, Object>) objs[1];
// 跳转到主界面
// 这里还需要默认给用户注册

}
break;
}
/**
* 返回false,说明事件继续向下分发,继续调用下面的handleMessage方法
* 返回true,说明自己消耗此事件,到此就结束了,起到拦截作用
* 这种用法似曾相识吧,不错,跟ViewGroup分发事件很类似
*/
return true;
}
}


三、短信验证码

这个去mob那里下载Android Studio SMS SDK -Version,然后解压,你会发现就是jar包。



如何使用,打开哪个txt文件瞧一瞧How to use?



基本环境集成好后,然后甩代码给你们

package com.qh.banya.activity;

import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.Toast;

import com.qh.banya.R;

import cn.smssdk.EventHandler;
import cn.smssdk.SMSSDK;

/**
* Created by zsj on 2016/8/10.
*/
public class RegisterFragment extends Fragment {

private View view;
private Button btnVerication;//发送验证码
// 填写从短信SDK应用后台注册得到的APPKEY
private static String APPKEY = "appkey";
// 填写从短信SDK应用后台注册得到的APPSECRET
private static String APPSECRET = "appsecret";
private boolean flag;//标识是否成功发送短信
private Handler handlermarkcode;//handler
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
view = inflater.inflate(R.layout.fragment_register, container, false);
initView();
initData();
return view;
}

private void initView() {

btnVerication= (Button) view.findViewById(R.id.btn_getverication);
}

private void initData() {
//初始化smssdk
SMSSDK.initSDK(getActivity(), APPKEY, APPSECRET);
EventHandler eh = new EventHandler() {
public void afterEvent(int event, int result, Object data) {
Message msg = new Message();
msg.arg1 = event;
msg.arg2 = result;
msg.obj = data;
handlermarkcode.sendMessage(msg);
}
};
// 注册短信验证的监听
SMSSDK.registerEventHandler(eh);
handlermarkcode = new Handler() {
public void handleMessage(Message msg) {
int event = msg.arg1;
int result = msg.arg2;
Object data = msg.obj;
if (result == SMSSDK.RESULT_COMPLETE) {
// 短信注册成功后,返回MainActivity,然后提示新好友
if (event == SMSSDK.EVENT_SUBMIT_VERIFICATION_CODE) {// 提交验证码成功
Toast.makeText(getActivity(), "提交验证码成功",
Toast.LENGTH_SHORT).show();
flag = true;
} else if (event == SMSSDK.EVENT_GET_VERIFICATION_CODE) {
Toast.makeText(getActivity(), "验证码已经发送",
Toast.LENGTH_SHORT).show();
} else {
((Throwable) data).printStackTrace();
Toast.makeText(getActivity(), "验证码错误",
Toast.LENGTH_SHORT).show();
flag = false;
}
}

};
};
btnVerication.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {

SMSSDK.getVerificationCode("86", "183********");

}
});
}
@Override
public void onDestroy() {
super.onDestroy();
SMSSDK.unregisterAllEventHandler();
}
}


你会发现,你遇到莫名其妙的问题,重启你的as,然后解决后,就会完美的集成好sharesdk了,当然,你还可以去问问mob客服也是可以的。哟西,都是可以的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐