1.问题
项目是纯flutter的,集成友盟推送,一开始,看到友盟有flutter推送的库,以为安卓的推送会很简单,后面集成的时候,发现是我想多了,始终逃不掉写原生的命运。
不要用友盟flutter的库!!!!不要看flutter的集成文档!!!!
不要用友盟flutter的库!!!!不要看flutter的集成文档!!!!
不要用友盟flutter的库!!!!不要看flutter的集成文档!!!!
重要的事情说三遍,如果你非要去试试,那就去吧,他那个flutter文档,不能说毫无用处,只能说一无是处。我折腾了flutter的库两天,最后能拿到token,但是却收不到推送!!!!最终,我还是屈服了,采用安卓原生的集成方式,集成完后,发现原生的反倒还简单点!!!!
2.步骤
2.1 去友盟注册账号,创建安卓项目。
这一步应该都会,略过。
2.2 拉取友盟的安卓推送库。
在flutter项目的android目录中,找到app的build.gradle,添加进去。注意路径,我这边是这样的,大家可以参考下:
切记,是上图1这个build.gradle,别搞错了。
在文件最后添加。
dependencies {
api 'com.umeng.umsdk:common:9.5.1'
api 'com.umeng.umsdk:asms:1.6.3'
api 'com.umeng.umsdk:push:6.5.4'
}
具体用哪个版本,参考友盟的文档。
2.3 在AndroidManifest.xml中,添加权限
添加权限:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.INTERNET"/>
2.4 注册友盟推送
最后在MainActivity.java中,添加友盟的初始化和注册,然后拿到token,去网页上面测试即可。
MainActivity.java最终内容如下:
package 你的包名;
import android.os.Bundle;
import com.umeng.message.PushAgent;
import io.flutter.embedding.android.FlutterActivity;
import android.content.ClipData;
import android.content.ClipboardManager;
import android.content.Context;
import com.umeng.commonsdk.UMConfigure;
import com.umeng.message.IUmengRegisterCallback;
import com.umeng.message.PushAgent;
public class MainActivity extends FlutterActivity {
protected MainActivity mContext;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mContext = this;
PushAgent.getInstance(mContext).onAppStart();
UMConfigure.init(this,
"你的AppKey",
"你的渠道号",
UMConfigure.DEVICE_TYPE_PHONE,
"你的Umeng Message Secret");
PushAgent mPushagent = PushAgent.getInstance(this);
mPushagent.register(new IUmengRegisterCallback() {
@Override
public void onSuccess(String deviceToken) {
// 这里拿到了device token,我复制到了剪切板,然后找个地方粘贴就能拿到网页上去测试了,各位自行处理
try {
ClipboardManager cm = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
ClipData mClipData = ClipData.newPlainText("Label", deviceToken);
cm.setPrimaryClip(mClipData);
} catch (Exception e) {
}
}
@Override
public void onFailure(String s, String s1) {
try {
ClipboardManager cm = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
ClipData mClipData = ClipData.newPlainText("Label", "s:" + s + ",s1:" + s1);
cm.setPrimaryClip(mClipData);
} catch (Exception e) {
}
}
});
}
}
我把token复制到了剪切板,然后拿到友盟官网去测试。
2.5 测试推送
这一步就需要去友盟官网测试了,很简单,自行去测试吧。