至于友盟注册以及开发使用,自行查看文档或者官网了。
微信平台:https://open.weixin.qq.com/
自行注册,以及申请开发者资质认证(需要300元)还有一系列注册需要的资料。通过这个后才有微信登录权限。
2、如果测试时候,如果已经多次登录微信。需要注销登录微信再进行测试。
3、测试的微信号一定要有微信号。最好也要有头像。
1. 首先当然是先复制一份正式证书出来作为要修改为的临时调试证书。
2. 修改keystore密码的命令(keytool为JDK带的命令行工具):
keytool -storepasswd -keystore my.keystore
其中,my.keystore是复制出来的证书文件,执行后会提示输入证书的当前密码,和新密码以及重复新密码确认。这一步需要将密码改为android。
3. 修改keystore的alias:
keytool -changealias -keystore my.keystore -alias my_name -destalias androiddebugkey
这一步中,my_name是证书中当前的alias,-destalias指定的是要修改为的alias,这里按规矩来,改为androiddebugkey!这个命令会先后提示输入keystore的密码和当前alias的密码。
4. 修改alias的密码:
keytool -keypasswd -keystore my.keystore -alias androiddebugkey
这一步执行后会提示输入keystore密码,alias密码,然后提示输入新的alias密码,同样,按规矩来,改为android!
以上几个操作执行后,my.keystore就是符合规矩的debug keystore了,接着在Eclipse的ADT设置中选中这个custom debug keystore即可。
微信平台:https://open.weixin.qq.com/
自行注册,以及申请开发者资质认证(需要300元)还有一系列注册需要的资料。通过这个后才有微信登录权限。
应用的提交审核需要的资料,签名等,微信或者友盟都有资料介绍。或者参考我的上一篇博客写的新浪微博的:http://blog.csdn.net/qq_16064871/article/details/50083807。
一、微信回调的activity注册
<!-- 微信回调activity 一定要是app的package包名--> <activity android:name=".wxapi.WXEntryActivity" android:configChanges="keyboardHidden|orientation|screenSize" android:exported="true" android:screenOrientation="portrait" android:theme="@android:style/Theme.Translucent.NoTitleBar" />
虽然友盟都建议,友盟开发包建成工程,最后引用这个这个友盟的工程。但这样做势必会造成引用这个工程的app包名跟 android:name=".wxapi.WXEntryActivity"这前面的包名不一样(app的包名+.wxapi.WXEntryActivity)而不是(友盟工程的包名+.wxapi.WXEntryActivity)。
所以这个空的WXEntryActivity还是要放在使用app的项目中,WXEntryActivity.class的完整路径应该是app的包名+.wxapi.WXEntryActivity。还有上面那个activity注册其他配置要一模一样。
这就是大多数人友盟的微信登陆回调没有用户信息返回的原因。就是没有执行到onComplete。
二、注意事项:
1、WXEntryActivity这个类里面什么都不用写。友盟帮我们写好了。就如下:
import com.umeng.socialize.weixin.view.WXCallbackActivity; public class WXEntryActivity extends WXCallbackActivity { }
2、如果测试时候,如果已经多次登录微信。需要注销登录微信再进行测试。
3、测试的微信号一定要有微信号。最好也要有头像。
三、下面看一下代码流程:
1、平台的注册,微信包加到平台
// 整个平台的Controller,负责管理整个SDK的配置、操作等处理 private UMSocialService mController = UMServiceFactory .getUMSocialService("com.umeng.login"); private void addWXPlatform() { // 注意:在微信授权的时候,必须传递appSecret // wx967daebe835fbeac是你在微信开发平台注册应用的AppID, 这里需要替换成你注册的AppID String appId = "wx....."; String appSecret = "gdfg......"; // 添加微信平台 UMWXHandler wxHandler = new UMWXHandler(LoginActivity.this, appId, appSecret); wxHandler.setRefreshTokenAvailable(true); wxHandler.addToSocialSDK(); }
2、微信登陆的调用与注销微信登陆
//登录微信调用 login(SHARE_MEDIA.WEIXIN); //注销微信登录 logout(SHARE_MEDIA.WEIXIN);
3、微信登陆与注销微信登陆整体代码,获取用户信息
/** * 授权。如果授权成功,则获取用户信息 * * @param platform */ private void login(final SHARE_MEDIA platform) { mController.doOauthVerify(LoginActivity.this, platform, new UMAuthListener() { @Override public void onStart(SHARE_MEDIA platform) { Toast.makeText(LoginActivity.this, "授权开始", Toast.LENGTH_SHORT).show(); } @Override public void onError(SocializeException e, SHARE_MEDIA platform) { Toast.makeText(LoginActivity.this, "授权失败", Toast.LENGTH_SHORT).show(); } @Override public void onComplete(Bundle value, SHARE_MEDIA platform) { Toast.makeText(LoginActivity.this, "授权完成", Toast.LENGTH_LONG).show(); // 获取uid String uid = value.getString("uid"); if (!TextUtils.isEmpty(uid)) { // uid不为空,获取用户信息 getUserInfo(platform); } else { Toast.makeText(LoginActivity.this, "授权失败...", Toast.LENGTH_LONG).show(); } } @Override public void onCancel(SHARE_MEDIA platform) { Toast.makeText(LoginActivity.this, "授权取消", Toast.LENGTH_SHORT).show(); } }); } /** * 获取用户信息 * * @param platform */ private void getUserInfo(SHARE_MEDIA platform) { mController.getPlatformInfo(LoginActivity.this, platform, new UMDataListener() { @Override public void onStart() { } @Override public void onComplete(int status, Map<String, Object> info) { // String showText = ""; // if (status == StatusCode.ST_CODE_SUCCESSED) { // showText = "用户名:" + // info.get("screen_name").toString(); // Log.d("#########", "##########" + info.toString()); // } else { // showText = "获取用户信息失败"; // } if (info != null) { Toast.makeText(LoginActivity.this, info.toString(),Toast.LENGTH_SHORT).show(); } } }); } /** * 注销本次登陆 * @param platform */ private void logout(final SHARE_MEDIA platform) { mController.deleteOauth(LoginActivity.this, platform, new SocializeClientListener() { @Override public void onStart() { } @Override public void onComplete(int status, SocializeEntity entity) { String showText = "解除" + platform.toString() + "平台授权成功"; if (status != StatusCode.ST_CODE_SUCCESSED) { showText = "解除" + platform.toString() + "平台授权失败[" + status + "]"; } Toast.makeText(LoginActivity.this, showText, Toast.LENGTH_SHORT).show(); } }); }
四、看图
五,带签名调试的千名证书
修改Android签名证书keystore的密码、别名alias以及别名密码
之前在 测试 Eclipse ADT的Custom debug keystore自定义调试证书的时候,发过一篇关于调试证书规格的博文:Eclipse ADT的Custom debug keystore所需证书规格,提到过自定义调试证书的密码和alias命名以及alias密码都是有规矩的。其实Android应用开发接入各种SDK时会发现,有很多SDK是需要靠package name和keystore的指纹hash来识别的(百度地图SDK、Facebook SDK等等…),这样如果使用默认自动生成的debug keystore的话就会给开发调试工作带来一些麻烦。这时可以通过修改正式的release keystore,生成一份“遵守规矩”的临时自定义调试证书给开发时用,就方便多了,具体方法如下:1. 首先当然是先复制一份正式证书出来作为要修改为的临时调试证书。
2. 修改keystore密码的命令(keytool为JDK带的命令行工具):
keytool -storepasswd -keystore my.keystore
其中,my.keystore是复制出来的证书文件,执行后会提示输入证书的当前密码,和新密码以及重复新密码确认。这一步需要将密码改为android。
3. 修改keystore的alias:
keytool -changealias -keystore my.keystore -alias my_name -destalias androiddebugkey
这一步中,my_name是证书中当前的alias,-destalias指定的是要修改为的alias,这里按规矩来,改为androiddebugkey!这个命令会先后提示输入keystore的密码和当前alias的密码。
4. 修改alias的密码:
keytool -keypasswd -keystore my.keystore -alias androiddebugkey
这一步执行后会提示输入keystore密码,alias密码,然后提示输入新的alias密码,同样,按规矩来,改为android!
以上几个操作执行后,my.keystore就是符合规矩的debug keystore了,接着在Eclipse的ADT设置中选中这个custom debug keystore即可。
到这里结束了,欢迎评论留下你的友盟开发之微信的疑问,我尽量帮你们解答。。。