Skip to content

Commit

Permalink
将腾讯的key改为gradle中定义
Browse files Browse the repository at this point in the history
  • Loading branch information
kale committed May 1, 2016
1 parent 2a50005 commit c358971
Show file tree
Hide file tree
Showing 11 changed files with 134 additions and 116 deletions.
148 changes: 72 additions & 76 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,74 +5,6 @@ ShareLoginLib likes simple sharesdk or umeng in China . It is a tool to help dev

## 示例
![](./screenshot/login.png) ![](./screenshot/share.png) ![](./screenshot/wechat.png)
## 准备工作

#### 1. 添加混淆参数
```
# ———————— 微信 start ————————
-keep class com.tencent.mm.sdk.** { *;}
# ———————— 微信 end ————————
# ———————— 微博 start ————————
-keep class com.sina.weibo.sdk.api.* { *; }
# ———————— 微微博 end ————————
# ———————— qq start ————————
-keep class com.tencent.open.TDialog$*
-keep class com.tencent.open.TDialog$* {*;}
-keep class com.tencent.open.PKDialog
-keep class com.tencent.open.PKDialog {*;}
-keep class com.tencent.open.PKDialog$*
-keep class com.tencent.open.PKDialog$* {*;}
# ———————— qq end ————————
```

#### 2. 在包名下新建wxapi这个包,然后放入WXEntryActivity
Activity的写法如下:

```JAVA
package 你自己的包名.wxapi;
import com.liulishuo.share.weixin.WeiXinHandlerActivity;

/**
* -----------------------------------------------------------------------
* 这是微信客户端回调activity.
* 必须在项目包名下的wxapi中定义,类名也不能改。奇葩到一定境界了!
* eg:com.kale.share是你的项目包名,那么这个类一定要放在com.kale.share.wxapi中才行。
* 而且千万不要更改类名,请保持WXEntryActivity不变
* WTF:真是微信蠢到家的设计,太愚蠢了
* -----------------------------------------------------------------------
*/
public class WXEntryActivity extends WeiXinHandlerActivity {}
```

#### 3. 在项目工程的manifest中配置Activity
```XML
<!-- 腾讯的认证activity -->
<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" />

<!-- 这里需要换成:tencent+你的AppId -->
<data android:scheme="tencent123456" />
</intent-filter>
</activity>

<!-- 处理微信回调的Activity -->
<activity
android:name=".wxapi.WXEntryActivity"
android:exported="true"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.NoDisplay"
/>
```

## 如何使用
#### 1. 在项目中使用第三方SDK功能前进行参数的注册
Expand All @@ -88,7 +20,7 @@ ShareBlock.getInstance()
#### 2. 进行登录、分享
```JAVA
// 登录
LoginManager.login(this, new LoginManager.LoginListener() {
LoginManager.login(this, LoginType.WeiBo,WeiXin,QQ】, new LoginManager.LoginListener() {
@Override
public void onSuccess(String accessToken, String uId, long expiresIn, @Nullable String wholeData) {

Expand All @@ -103,14 +35,13 @@ LoginManager.login(this, new LoginManager.LoginListener() {
public void onCancel() {

}
}, LoginType.WeiBo,WeiXin,QQ);
});


// 分享
ShareManager.share(MainActivity.this
new ShareContentWebpage("title", "hello world!", "https://www.baidu.com", mBitmap)
, ShareType.QQ_FRIEND
, new ShareManager.ShareStateListener() {
ShareManager.share(MainActivity.thisShareType.【xxxx】
new ShareContentWebpage("title", "hello world!", "https://www.baidu.com", mBitmap),
new ShareManager.ShareStateListener() {
@Override
public void onSuccess() {

Expand Down Expand Up @@ -138,7 +69,7 @@ ShareBlock.isQQInstalled(this);

#### 4. 通过token和id得到用户的详细信息
```JAVA
UserInfoManager.getUserInfo(context, accessToken, userId, new UserInfoManager.UserInfoListener() {
UserInfoManager.getUserInfo(context, LoginType.WeiBo,WeiXin,QQ】, accessToken, userId, new UserInfoManager.UserInfoListener() {
@Override
public void onSuccess(@NonNull AuthUserInfo userInfo) {
// 可以得到:昵称,性别,头像url,用户id
Expand All @@ -148,11 +79,76 @@ UserInfoManager.getUserInfo(context, accessToken, userId, new UserInfoManager.Us
public void onError(String msg) {

}
}, LoginType.WeiBo,WeiXin,QQ);
});
```

更多详细的操作请参考项目源码。

## 配置工作

#### 1. 添加混淆参数
```
# ———————— 微信 ————————
-keep class com.tencent.mm.sdk.** { *;}
# ———————— 微博 ————————
-keep class com.sina.weibo.sdk.api.* { *; }
# ———————— QQ ————————
-keep class com.tencent.open.TDialog$*
-keep class com.tencent.open.TDialog$* {*;}
-keep class com.tencent.open.PKDialog
-keep class com.tencent.open.PKDialog {*;}
-keep class com.tencent.open.PKDialog$*
-keep class com.tencent.open.PKDialog$* {*;}
```

#### 2. 在包名下新建wxapi这个包,然后放入WXEntryActivity
Activity的写法如下:

```JAVA
package 你自己的包名.wxapi;
import com.liulishuo.share.weixin.WeiXinHandlerActivity;

/**
* -----------------------------------------------------------------------
* 这是微信客户端回调activity.
* 必须在项目包名下的wxapi中定义,类名也不能改。奇葩到一定境界了!
* eg:com.kale.share是你的项目包名,那么这个类一定要放在com.kale.share.wxapi中才行。
* 而且千万不要更改类名,请保持WXEntryActivity不变
* WTF:真是微信蠢到家的设计,太愚蠢了
* -----------------------------------------------------------------------
*/
public class WXEntryActivity extends WeiXinHandlerActivity {}
```

#### 3. 在项目工程的manifest中配置Activity
```XML
<!-- 处理微信回调的Activity -->
<activity
android:name=".wxapi.WXEntryActivity"
android:exported="true"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.NoDisplay"
/>
```

#### 4. 在使用lib的module中的build.gradle中配置腾讯的key
```JAVA
defaultConfig {
applicationId "com.liulishuo.engzo"
minSdkVersion 15
targetSdkVersion 23
versionCode 1
versionName "1.0"

manifestPlaceholders = [
// 这里需要换成:tencent+你的AppId
"tencentAuthId": "tencent123456",
]
}
```

## 测试用例
1. 开启不保留活动
2. 未安装第三方应用
Expand Down
5 changes: 5 additions & 0 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,11 @@ android {
targetSdkVersion 23
versionCode 1
versionName "1.0"

manifestPlaceholders = [
// 这里需要换成:tencent+你的AppId
"tencentAuthId": "tencent23456",
]
}

buildTypes {
Expand Down
26 changes: 14 additions & 12 deletions app/src/main/java/com/liulishuo/engzo/MainActivity.java
Original file line number Diff line number Diff line change
Expand Up @@ -100,31 +100,31 @@ public void onClick(View v) {
switch (v.getId()) {
case R.id.QQ登录:
mLoginListener.setType(LoginType.QQ);
LoginManager.login(this, mLoginListener, LoginType.QQ);
LoginManager.login(this, LoginType.QQ, mLoginListener);
break;
case R.id.微信登录:
mLoginListener.setType(LoginType.WEIXIN);
LoginManager.login(this, mLoginListener, LoginType.WEIXIN);
LoginManager.login(this, LoginType.WEIXIN, mLoginListener);
break;
case R.id.微博登录:
mLoginListener.setType(LoginType.WEIBO);
LoginManager.login(this, mLoginListener, LoginType.WEIBO);
LoginManager.login(this, LoginType.WEIBO, mLoginListener);
break;

case R.id.分享给QQ好友:
ShareManager.share(this, mShareContent, ShareType.QQ_FRIEND, mShareListener);
ShareManager.share(this, ShareType.QQ_FRIEND, mShareContent, mShareListener);
break;
case R.id.分享到QQ空间:
ShareManager.share(this, mShareContent, ShareType.QQ_ZONE, mShareListener);
ShareManager.share(this, ShareType.QQ_ZONE, mShareContent, mShareListener);
break;
case R.id.分享给微信好友:
ShareManager.share(this, mShareContent, ShareType.WEIXIN_FRIEND, mShareListener);
ShareManager.share(this, ShareType.WEIXIN_FRIEND, mShareContent, mShareListener);
break;
case R.id.分享到微信朋友圈:
ShareManager.share(this, mShareContent, ShareType.WEIXIN_FRIEND_ZONE, mShareListener);
ShareManager.share(this, ShareType.WEIXIN_FRIEND_ZONE, mShareContent, mShareListener);
break;
case R.id.分享到微博:
ShareManager.share(this, mShareContent, ShareType.WEIBO_TIME_LINE, mShareListener);
ShareManager.share(this, ShareType.WEIBO_TIME_LINE, mShareContent, mShareListener);
break;
}
}
Expand All @@ -133,15 +133,17 @@ public void onClick(View v) {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);

}
};

public class MyLoginListener implements LoginManager.LoginListener {

public static final String TAG = "LoginListener";

private @LoginType int mType;
private
@LoginType
String mType;

private UserInfoManager.UserInfoListener mUserInfoListener = new UserInfoManager.UserInfoListener() {
@Override
Expand Down Expand Up @@ -173,7 +175,7 @@ public void onError(String msg) {
}
};

public void setType(@LoginType int type) {
public void setType(@LoginType String type) {
mType = type;
}

Expand All @@ -185,7 +187,7 @@ public void onSuccess(String accessToken, String userId, long expiresIn, String
Log.d(TAG, "登录成功");
Toast.makeText(MainActivity.this, "登录成功", Toast.LENGTH_SHORT).show();

UserInfoManager.getUserInfo(MainActivity.this, accessToken, userId, mUserInfoListener, mType);
UserInfoManager.getUserInfo(MainActivity.this, mType, accessToken, userId, mUserInfoListener);
}

@Override
Expand Down
1 change: 0 additions & 1 deletion share/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,6 @@
android:theme="@android:style/Theme.Translucent.NoTitleBar"
/>


<!-- 腾讯的认证activity -->
<activity
android:name="com.tencent.tauth.AuthActivity"
Expand Down
10 changes: 6 additions & 4 deletions share/src/main/java/com/liulishuo/share/LoginManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@
import android.support.annotation.Nullable;
import android.widget.Toast;

import static com.liulishuo.share.type.LoginType.*;

/**
* @author Kale
* @date 2016/3/30
Expand All @@ -21,21 +23,21 @@ public class LoginManager {
@Nullable
LoginListener listener;

public static void login(@NonNull Activity activity, @Nullable LoginListener listener, @LoginType int type) {
public static void login(@NonNull Activity activity, @LoginType String type, @Nullable LoginListener listener) {
LoginManager.listener = listener;
switch (type) {
case LoginType.WEIXIN:
case WEIXIN:
if (!ShareBlock.isWeiXinInstalled(activity)) {
Toast.makeText(activity, "请安装微信哦~", Toast.LENGTH_SHORT).show();
return;
}
new WeiXinLoginManager().login(activity.getApplicationContext());
break;
case LoginType.WEIBO:
case WEIBO:
activity.startActivity(new Intent(activity, SL_WeiBoLoginActivity.class));
activity.overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
break;
case LoginType.QQ:
case QQ:
if (!ShareBlock.isQQInstalled(activity)) {
Toast.makeText(activity, "请先安装QQ哦~", Toast.LENGTH_SHORT).show();
return;
Expand Down
16 changes: 9 additions & 7 deletions share/src/main/java/com/liulishuo/share/ShareManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@
import android.support.annotation.Nullable;
import android.widget.Toast;

import static com.liulishuo.share.type.ShareType.*;

/**
* @author Kale
* @date 2016/3/30
Expand All @@ -22,22 +24,22 @@ public class ShareManager {

public static ShareStateListener listener;

public static void share(@NonNull Activity activity, @NonNull ShareContent shareContent, @ShareType int shareType,
public static void share(@NonNull Activity activity, @ShareType String shareType, @NonNull ShareContent shareContent,
@Nullable final ShareStateListener listener) {
ShareManager.listener = listener;
switch (shareType) {
case ShareType.QQ_FRIEND:
case ShareType.QQ_ZONE:
case QQ_FRIEND:
case QQ_ZONE:
if (!ShareBlock.isQQInstalled(activity)) {
Toast.makeText(activity, "请先安装QQ哦~", Toast.LENGTH_SHORT).show();
return;
}
activity.startActivity(new Intent(activity, SL_QQShareActivity.class)
.putExtra(SL_QQShareActivity.KEY_TO_FRIEND, shareType == ShareType.QQ_FRIEND)
.putExtra(SL_QQShareActivity.KEY_TO_FRIEND, shareType == QQ_FRIEND)
.putExtra(KEY_CONTENT, shareContent));
activity.overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
break;
case ShareType.WEIBO_TIME_LINE:
case WEIBO_TIME_LINE:
if (!ShareBlock.isWeiBoInstalled(activity)) {
Toast.makeText(activity, "请先安装微博哦~", Toast.LENGTH_SHORT).show();
return;
Expand All @@ -46,8 +48,8 @@ public static void share(@NonNull Activity activity, @NonNull ShareContent share
.putExtra(KEY_CONTENT, shareContent));
activity.overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
break;
case ShareType.WEIXIN_FRIEND:
case ShareType.WEIXIN_FRIEND_ZONE:
case WEIXIN_FRIEND:
case WEIXIN_FRIEND_ZONE:
if (!ShareBlock.isWeiXinInstalled(activity)) {
Toast.makeText(activity, "请安装微信哦~", Toast.LENGTH_SHORT).show();
return;
Expand Down
4 changes: 2 additions & 2 deletions share/src/main/java/com/liulishuo/share/UserInfoManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,8 @@
*/
public class UserInfoManager {

public static void getUserInfo(Context context, @NonNull String accessToken, @NonNull String uid,
@Nullable final UserInfoListener listener, @LoginType int type) {
public static void getUserInfo(Context context, @LoginType String type, @NonNull String accessToken, @NonNull String uid,
@Nullable final UserInfoListener listener) {
switch (type) {
case LoginType.WEIXIN:
getWeiXinUserInfo(context, accessToken, uid, listener);
Expand Down
4 changes: 4 additions & 0 deletions share/src/main/java/com/liulishuo/share/type/ContentType.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,13 @@

import android.support.annotation.IntDef;

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

/**
* Created by echo on 5/18/15.
*/
@Retention(RetentionPolicy.SOURCE)
@IntDef({ContentType.TEXT, ContentType.PIC, ContentType.WEBPAGE, ContentType.MUSIC})
public @interface ContentType {

Expand Down
Loading

0 comments on commit c358971

Please sign in to comment.