基于Android系统开发ionic调用友盟SDK的Cordova插件

一、集成友盟推送
1. 准备工作
  • 注册友盟开发账号
  • 上传应用 获取AppKey和Umeng Message Secret
  • 下载友盟SDK
  • 新建cordova插件
  • 查看文档的开发流程
    参考:https://developer.umeng.com/docs/66632/detail/66744
二、集成开发
1. 新建ionic项目
2. 修改config.xml中的id和name,这边的id需要跟友盟上传的应用id一致 【很重要】

在这里插入图片描述

3. 加入安卓或者ios平台
4. 将插件集成进ionic 项目中
5. 用Android Studio打开android平台代码,查看插件是否已经成功加入。
6. 加入所需lib和so包、自定义Application

注意开发文档中提到的:初始化方法由基础组件包提供,要使用PushSDK,必须在工程的自定义Application类的 onCreate() 方法中调用基础组件包提供的初始化函数
跟其他的推送不一样,友盟规定了app启动就必须注册友盟通知,就没有其他的第三方推送说的,启动app之后开启通知的说法。
根据要求新建UMApplication继承Application,在onCreate方法里完成友盟的注册功能,具体实现如下:

package com.ai.ced.umpush;

import android.app.Application;
import android.content.SharedPreferences;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.util.Log;

import com.umeng.commonsdk.UMConfigure;
import com.umeng.message.IUmengRegisterCallback;
import com.umeng.message.PushAgent;

/**
 * Created by yd on 2019/3/11.
 */

public class UMApplication extends Application {

    private static final String TAG = UMApplication.class.getSimpleName();

    private  SharedPreferences.Editor editor;

    @Override
    public void onCreate() {
        super.onCreate();
        // 将token 保存进token.xml文件中
        SharedPreferences tokenSP = getSharedPreferences("token", 0);
        editor = tokenSP.edit();

        String appKey = "";
        String message_secret = "";

       try {
           ApplicationInfo appInfo = this.getPackageManager()
                   .getApplicationInfo(this.getPackageName(),PackageManager.GET_META_DATA);
           appKey = appInfo.metaData.getString("UM_APPKEY");
           message_secret = appInfo.metaData.getString("UM_MESSAGE_SECRET");

       } catch (PackageManager.NameNotFoundException e) {
           e.printStackTrace();
       }


        // 在此处调用基础组件包提供的初始化函数 相应信息可在应用管理 -> 应用信息 中找到 http://message.umeng.com/list/apps
        // 参数一:当前上下文context;
        // 参数二:应用申请的Appkey(需替换);
        // 参数三:渠道名称;
        // 参数四:设备类型,必须参数,传参数为UMConfigure.DEVICE_TYPE_PHONE则表示手机;传参数为UMConfigure.DEVICE_TYPE_BOX则表示盒子;默认为手机;
        // 参数五:Push推送业务的secret 填充Umeng Message Secret对应信息(需替换)

        UMConfigure.init(this, appKey, "Umeng", UMConfigure.DEVICE_TYPE_PHONE, message_secret);

        PushAgent mPushAgent = PushAgent.getInstance(this);
        //注册推送服务,每次调用register方法都会回调该接口
        mPushAgent.register(new IUmengRegisterCallback() {

            @Override
            public void onSuccess(String deviceToken) {
                //注册成功会返回device token
                Log.v(TAG,"推送服务注册成功");
                Log.v(TAG,"my device token = " + deviceToken);
                // 保存token
                editor.putString("token",deviceToken);
                editor.commit();
            }

            @Override
            public void onFailure(String s, String s1) {
                Log.v(TAG,"推送服务注册失败");
                Log.v(TAG,"s=" + s);
                Log.v(TAG,"s1=" + s1);
            }
        });


    }


}

配置自定义的Application在这里插入图片描述所需lib和so在这里插入图片描述

7. 开发UMPushPlugin
package com.ai.ced.umpush;

import android.app.Activity;
import android.util.Log;

import com.umeng.commonsdk.UMConfigure;
import com.umeng.message.IUmengCallback;
import com.umeng.message.PushAgent;

import org.apache.cordova.CordovaPlugin;
import org.apache.cordova.CallbackContext;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

/**
 * This class echoes a string called from JavaScript.
 */
public class UMPushPlugin extends CordovaPlugin {

    public static final String TAG = "UMPushPlugin";

    public static Activity activity;

    @Override
    public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException {
        Log.d(TAG,"execute");
        activity = this.cordova.getActivity();

        if (action.equals("stopUMPushSDK")){
            this.stopUMPushSDK("",callbackContext);
        }
        return false;
    }
    
    /**
     * 关闭通知
     * @param message
     * @param callbackContext
     */
    private void stopUMPushSDK(String message, CallbackContext callbackContext){
        // 获取推送实例
        PushAgent mPushAgent = PushAgent.getInstance(activity);
        // 关闭推送
        mPushAgent.disable(new IUmengCallback() {
            @Override
            public void onSuccess() {
                Log.d(TAG,"关闭推送成功");
            }

            @Override
            public void onFailure(String s, String s1) {
                Log.d(TAG,"关闭推送失败");
            }
        });

    }

}
8. 配置权限
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.BROADCAST_PACKAGE_ADDED" />
<uses-permission android:name="android.permission.BROADCAST_PACKAGE_CHANGED" />
<uses-permission android:name="android.permission.BROADCAST_PACKAGE_INSTALL" />
<uses-permission android:name="android.permission.BROADCAST_PACKAGE_REPLACED" />
<uses-permission android:name="android.permission.RESTART_PACKAGES" />
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
9. 配置UM_APPKEY 、UM_MESSAGE_SECRET
<meta-data android:name="UM_APPKEY" android:value="5c7f92043fc1953c52000818" />
<meta-data android:name="UM_MESSAGE_SECRET" android:value="a7c455d1f0bc94547ac2f4dcb67108d7" />
10. 配置所需service、provider
<service android:exported="true" android:name="com.taobao.accs.ChannelService" android:process=":channel">
    <intent-filter>
        <action android:name="com.taobao.accs.intent.action.SERVICE" />
    </intent-filter>
    <intent-filter>
        <action android:name="com.taobao.accs.intent.action.ELECTION" />
    </intent-filter>
</service>
<service android:exported="true" android:name="com.taobao.accs.data.MsgDistributeService">
    <intent-filter>
        <action android:name="com.taobao.accs.intent.action.RECEIVE" />
    </intent-filter>
</service>
<receiver android:name="com.taobao.accs.EventReceiver" android:process=":channel">
    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED" />
    </intent-filter>
    <intent-filter>
        <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
    </intent-filter>
    <intent-filter>
        <action android:name="android.intent.action.PACKAGE_REMOVED" />
        <data android:scheme="package" />
    </intent-filter>
    <intent-filter>
        <action android:name="android.intent.action.USER_PRESENT" />
    </intent-filter>
</receiver>
<receiver android:name="com.taobao.accs.ServiceReceiver" android:process=":channel">
    <intent-filter>
        <action android:name="com.taobao.accs.intent.action.COMMAND" />
    </intent-filter>
    <intent-filter>
        <action android:name="com.taobao.accs.intent.action.START_FROM_AGOO" />
    </intent-filter>
</receiver>
<service android:name="com.taobao.accs.internal.AccsJobService" android:permission="android.permission.BIND_JOB_SERVICE" android:process=":channel" />
<service android:name="com.taobao.accs.ChannelService$KernelService" android:process=":channel" />
<service android:exported="true" android:name="org.android.agoo.accs.AgooService">
    <intent-filter>
        <action android:name="com.taobao.accs.intent.action.RECEIVE" />
    </intent-filter>
</service>
<service android:exported="true" android:name="com.umeng.message.UmengIntentService" android:process=":channel">
    <intent-filter>
        <action android:name="org.agoo.android.intent.action.RECEIVE" />
    </intent-filter>
</service>
<receiver android:exported="true" android:name="com.taobao.agoo.AgooCommondReceiver" android:process=":channel">
    <intent-filter>
        <action android:name="${applicationId}.intent.action.COMMAND" />
    </intent-filter>
    <intent-filter>
        <action android:name="android.intent.action.PACKAGE_REMOVED" />
        <data android:scheme="package" />
    </intent-filter>
</receiver>
<service android:exported="true" android:name="com.umeng.message.UmengMessageIntentReceiverService" android:process=":channel">
    <intent-filter>
        <action android:name="org.android.agoo.client.MessageReceiverService" />
    </intent-filter>
</service>
<receiver android:exported="false" android:name="com.umeng.message.NotificationProxyBroadcastReceiver" />
<service android:exported="false" android:name="com.umeng.message.UmengMessageCallbackHandlerService">
    <intent-filter>
        <action android:name="com.umeng.messge.registercallback.action" />
    </intent-filter>
    <intent-filter>
        <action android:name="com.umeng.message.enablecallback.action" />
    </intent-filter>
    <intent-filter>
        <action android:name="com.umeng.message.disablecallback.action" />
    </intent-filter>
    <intent-filter>
        <action android:name="com.umeng.message.message.handler.action" />
    </intent-filter>
    <intent-filter>
        <action android:name="com.umeng.message.message.sendmessage.action" />
    </intent-filter>
</service>
<service android:exported="false" android:name="com.umeng.message.UmengDownloadResourceService" />
<provider android:authorities="${applicationId}.umeng.message" android:exported="false" android:name="com.umeng.message.provider.MessageProvider">
    <grant-uri-permission android:pathPattern=".*" />
</provider>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值