admin管理员组文章数量:1608851
第一次写博客有写的不好的地方,请大家见谅,我会尽量写得更加细节
在初学这中实现第三方QQ登录微信登录时会遇到很多问题,现在我讲讲一下之前我遇到的那些问题。
其实在友盟实现第三方登录时,由于文档有些细节写得不是很清楚,导致很多很多新手在仿照友盟demo时总是适配不对。下面我讲讲如何进行友盟实现第三方登录
在此之前你需要申请友盟的APPKEY QQ的appid appkey 微信的APPID APPSECRET
第一:导入SKD
导入友盟demo里面所有SDK包(这里面还包含了很多其他比如说新浪,支付宝,facebook等一些SDK如果分不清也可以一起导入),其次还需要在dome中的libs文件下的arm64-v8a,armeabi,mips,mips64,x86,x86-64分别有libweibosdk.so文件都导入到自己工程里面相对用的文件中来。(这里提醒一下libweibosdk.so的文件名相同,但是都不一样千万别倒错位置了,一定要对应的导入)还有res文件也有相对应的地方需要加入一些友盟demo一些文件以及图片。
第二:配置Manifest.XML文件
在配置Manifest.XML首先是权限设置
<这里面有在友盟的文档中写得比较清楚>
<!-- ###################声明SDK使用的相关权限###################### --><!-- 检测网络状态 --><uses-permissionandroid:name="android.permission.ACCESS_NETWORK_STATE" /><!-- 获取mac地址作为用户的备用唯一标识 --><uses-permissionandroid:name="android.permission.ACCESS_WIFI_STATE" /><!-- 获取用户手机的IMEI,用来唯一的标识用户 --><uses-permissionandroid:name="android.permission.READ_PHONE_STATE" /><!-- 缓存资源优先存入SDcard --><uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE" /><!-- 允许应用程序联网,以便向我们的服务器端发送数据 --><uses-permissionandroid:name="android.permission.INTERNET" /><!-- QQ、QQ空间所需权限 --><uses-permissionandroid:name="android.permission.GET_TASKS" />
<!-- ###################注册SDK使用的Activity###################### --><!--分享编辑页--><activityandroid:name="com.umeng.socialize.view.ShareActivity"android:configChanges="orientation|keyboard"android:launchMode="singleTask"android:noHistory="true"android:theme="@style/Theme.UMDialog"android:windowSoftInputMode="stateVisible|adjustResize" ></activity>
QQ的基本也直接粘贴复制
<!-- QQ-->
<activity
android:name="com.tencent.tauth.AuthActivity"
android:launchMode="singleTask"
android:noHistory="true" >
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="tencentxxxxxxxxxxxxxxx" />//这里需要填写你申请QQ的APPID
</intent-filter>
</activity>
<activityandroid:name="com.tencent.connectmon.AssistActivity"android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:screenOrientation="portrait"></activity>
微信
<!-- 微信 -->
<activity
android:name=".wxapi.WXEntryActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:exported="true"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
<!-- twitter -->
<activity
android:name="com.umeng.socialize.handler.TwitterWebActivity"
android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"
android:label="@string/app_name"
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
注意:这里需要强调一下
如果在您的项目中集成了微信或者微信朋友圈,并且您需要准确的分享回调,则需要在AndroidManifest.xml中下注册下面的回调Activity。
然后将下载的demo中的platforms/weixin目录下的wxapi文件夹拷贝到您的工程的包目录下, 然后修改WXEntryActivity的完整路径即可。
例如social_sdk_example的包名为com.umeng.soexample,因此将wxapi文件夹拷贝到com.umeng.soexample下,最终WXEntryActivity的 完整路径为com.umeng.soexample.wxapi.WXEntryActivity。
其中分享的回调接口SnsPostListener的onComplete方法的第二个参数代表分享的状态码,当值为200时表示分享成功;其余的值则为分享失败
<!--------添加友盟的KEY-------------->
<meta-data
android:name="UMENG_APPKEY"android:value="xxxxxxxxxxxxxxxxxxxxxxxxxxxxx" >
</meta-data>
<meta-data
android:name="UMENG_CHANNEL"
android:value="Umeng" >
</meta-data>
第三:在application类中加入QQ的APPID,APPKEY和微信的APPID和APPSECRET
各个平台的配置,建议放在全局Application或者程序入口
{
PlatformConfig.setQQZone("110XXXXXXXXXX", "KaDFXXXXXXXX");
PlatformConfig.setWeixin("wxeda5XXXXXXXXXX", "5f48db6a1efXXXXXXXX");
}
第四,代码
这里面的代码也就可以基本复制友盟demo的就可以了。
//实现微信QQ登录
public class LoginActivity extends Activity{
//友盟API
private UMShareAPI mShareAPI=null;
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
inintView();
// dialog=new MyProgerssDialog(LoginActivity.this);
mShareAPI = UMShareAPI.get(this);
}
public void onClickAuth(View view) {
// TODO Auto-generated method stub
if (view.getId() == R.id.qq_register ){
platform = SHARE_MEDIA.QQ;
}else if (view.getId() == R.id.weiXin_register){
platform = SHARE_MEDIA.WEIXIN;
}
//授权成功
mShareAPI.doOauthVerify(LoginActivity.this, platform, wwumAuthListener);
}
private UMAuthListener wwumAuthListener = new UMAuthListener() {
@Override
public void onError(SHARE_MEDIA arg0, int arg1, Throwable arg2) {
// TODO Auto-generated method stub
Toast.makeText( getApplicationContext(), "授权失败", Toast.LENGTH_SHORT).show();
}
@Override
public void onComplete(SHARE_MEDIA arg0, int arg1, Map<String, String> arg2) {
// TODO Auto-generated method stubz
Toast.makeText(getApplicationContext(), "授权成功", Toast.LENGTH_SHORT).show();
//获取用户信息
mShareAPI.getPlatformInfo(LoginActivity.this, platform, umAuthListener);
}
@Override
public void onCancel(SHARE_MEDIA arg0, int arg1) {
// TODO Auto-generated method stub
Toast.makeText( getApplicationContext(), "授权失败", Toast.LENGTH_SHORT).show();
}
};
private UMAuthListener umAuthListener=new UMAuthListener() {
@Override
public void onError(SHARE_MEDIA arg0, int arg1, Throwable arg2) {
arg2.printStackTrace();
}
@Override
public void onComplete(SHARE_MEDIA arg0, int arg1, Map<String, String> arg2) {
if (arg2==null||arg2.size()<1) {
return;
}
Set<String> set=null;
try {
set = arg2.keySet();
} catch (Exception e) {
e.printStackTrace();
return;
}
//QQ登录
if(platform==SHARE_MEDIA.QQ){
String str=arg2.get("openid");
str=str.substring(0, 5);
SharedPreferencesConfig.saveStringConfig(LoginActivity.this, "username","WW_"+str );
// SharedPreferencesConfig.saveStringConfig(LoginActivity.this, "username2","WW_"+str );
SharedPreferencesConfig.saveStringConfig(LoginActivity.this, "nickname", arg2.get("screen_name"));
SharedPreferencesConfig.saveStringConfig(LoginActivity.this, "sex", arg2.get("gender"));
SharedPreferencesConfig.saveStringConfig(LoginActivity.this, "hdimg", arg2.get("profile_image_url"));
SharedPreferencesConfig.saveStringConfig(LoginActivity.this, "address", arg2.get("province")+arg2.get("city"));
SharedPreferencesConfig.saveStringConfig(LoginActivity.this, "sign", "");
}
if(platform==SHARE_MEDIA.WEIXIN){
String str=arg2.get("openid");
str=str.substring(str.length()-5, str.length());
String strSex = arg2.get("sex");
if(strSex.equals("1")){
strSex="男";
}else{
strSex="女";
}
SharedPreferencesConfig.saveStringConfig(LoginActivity.this, "username","WW_"+ str);
// SharedPreferencesConfig.saveStringConfig(LoginActivity.this, "username2","WW_"+ str);
SharedPreferencesConfig.saveStringConfig(LoginActivity.this, "nickname", arg2.get("nickname"));
SharedPreferencesConfig.saveStringConfig(LoginActivity.this, "sex", strSex);
SharedPreferencesConfig.saveStringConfig(LoginActivity.this, "hdimg", arg2.get("headimgurl"));
SharedPreferencesConfig.saveStringConfig(LoginActivity.this, "address", arg2.get("province")+arg2.get("city"));
SharedPreferencesConfig.saveStringConfig(LoginActivity.this, "sign", "");
}
myProgerssDialog = new MyProgerssDialog(LoginActivity.this);
myProgerssDialog.SetMessage("");
}
@Override
public void onCancel(SHARE_MEDIA arg0, int arg1) {
// TODO Auto-generated method stub
}
};
重写onActivityResult方法
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
mShareAPI.onActivityResult(requestCode, resultCode, data);
}
}
以上就是友盟第三方登录的全过程,第三方登录代码没多少就是配置比较多。
QQ出现100044的问题:
答:这是因为QQ的签名包和自己的签名包不一致导致的,而且只有测试号才能进行登录。
微信无法登录:
答:微信需要自己生成一个keytool签名文件,然后打包成一份AKP,找到MD5的值,MD5值需要在微信后台保持一致,才能登录
注意:全公司用只用用一个签名文件,不管是谁生成的,一定要保存好。
注意:全公司用只用用一个签名文件,不管是谁生成的,一定要保存好。
注意:全公司用只用用一个签名文件,不管是谁生成的,一定要保存好。
重要的事情说三遍
本文标签: 第三方
版权声明:本文标题:安卓第三方友盟登录与分享 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dianzi/1728553389a1163566.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论