微信接入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;
		}
	}
}
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐