Android接入微信SDK如何处理WXEntryActivity
·
微信接入WXEntryActivity
- 微信接入的官网:Android接入指南 | 微信开放文档
- 微信SDK接入里面有这么一段说明:在你的包名相应目录下新建一个 wxapi 目录,并在该 wxapi 目录下新增一个 WXEntryActivity 类,该类继承自 Activity(例如应用程序的包名为net.sourceforge.simcpux,则新添加的类如下图所示)

并在 manifest 文件里面加上exported、taskAffinity及 launchMode 属性,其中 exported 设置为true,taskAffinity设置为你的包名,launchMode设置为singleTask,例如:
<activity
android:name=".wxapi.WXEntryActivity"
android:label="@string/app_name"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:exported="true"
android:taskAffinity="填写你的包名"
android:launchMode="singleTask">
</activity>
遇到的问题
- 如果安装官网这样接入,你的应用包名永远不变化,就不会出什么问题,一旦我们包名变更,那么我们就需要重构 WXEntryActivity 的包名路径,这是一件很麻烦的事情,如果我们是做SDK开发,里面集成了微信,把WXEntryActivity 的包名路径写死了的话,接入方就没法使用我们的微信功能了
解决问题
android的AndroidManifest.xml提供了一个activity-alias标签,也就是Activity的别名标签,activity-alias可以目标Activity申明一个别名,要启动目标Activity就可以通过启动别名Activity来启动,根据activity-alias标签的属性功能,我们就可以这样做
<activity
android:name="com.mypkg.wechat.WXEntryActivity"
android:exported="true"
android:launchMode="singleTask"
android:taskAffinity="${applicationId}"
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
<activity-alias
android:name="${applicationId}.wxapi.WXEntryActivity"
android:exported="true"
android:targetActivity="com.mypkg.wechat.WXEntryActivity" />
- 如果我们是做SDK开发的,com.mypkg.wechat.WXEntryActivity 这个类包名路径就可以写死了,直接将上面的配置打包为aar提供给接入方,接入方项目工程的build.gradle(app)配置的applicationId(即包名)会自动将AndroidManifest.xml中的${applicationId} 替换为设置的包名
- 接入了很多SDK,他们的处理方式也是这样的比如B站、360、应用宝、爱奇艺、三星渠道SDK就是让我们按照类似上面的配置,因为他们聚合了微信SDK
- 有兴趣了解activity-alias标签的作用的可以参考这篇文章 activity-alias详解及应用_aspook的博客-CSDN博客_activityalias作用
微信分享、支付、登陆无法回调问题WXEntryActivity和WXPayEntryActivity
**微信分享、登陆** 无法回调问题大概率是该文件名错误,请认准 **WXEntryActivity.java**
微信支付 无法回调问题大概率是该文件名错误,请认准 WXPayEntryActivity.java
微信登录功能 /移动应用微信登录开发指南:
在Application.java文件中增加:
public static IWXAPI iwxapi;
iwxapi = WXAPIFactory.createWXAPI(getApplicationContext(), Constants.WECHAT_APP_ID, true);
iwxapi.registerApp(Constants.WECHAT_APP_ID);
在需要登陆处增加:
{
// send oauth request
SendAuth.Req req = new SendAuth.Req();
req.scope = "snsapi_userinfo";
req.state = "wechat_sdk_demo_test";
iwxapi.sendReq(req);
}
WXEntryActivity.java回调如下:
public class WXEntryActivity extends Activity implements IWXAPIEventHandler {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
iwxapi.handleIntent(getIntent(), this);
}
@Override
public void onReq(BaseReq baseReq) {
switch (baseReq.getType()) {
case ConstantsAPI.COMMAND_SHOWMESSAGE_FROM_WX:
break;
default:
break;
}
}
@Override
public void onResp(BaseResp baseResp) {
switch (baseResp.errCode) {
case BaseResp.ErrCode.ERR_AUTH_DENIED:
break;
case BaseResp.ErrCode.ERR_USER_CANCEL:
break;
case BaseResp.ErrCode.ERR_OK:
break;
}
}
}
更多推荐


所有评论(0)