至於友盟註冊以及開發使用,自行查看文檔或者官網了。
微信平臺: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即可。
到這裏結束了,歡迎評論留下你的友盟開發之微信的疑問,我儘量幫你們解答。。。