gcm推送

前言:最近在项目中要做一个推送的功能,之前我在做推送的时候一直用的都是极光推送,由于项目的需求是用gcm做推送的,我特意去看了gcm推送的官方文档,因此简单地总结了gcm推送的使用。

gcm推送的使用流程:

一、配置环境

1.在国内,想要连接到Google服务器,需要走VPN或者其它方式可以连接到Google服务器。

2.在开发环境中,android studio的Android SDK Manager中下载安装Google Play services。

3.在Android客户端,要求安装Google Play服务,Google Play商店才能使用gcm。

二、创建项目获取信息
第 1 步:登录Google开发平台(https://console.developers.google.com/project),创建你的应用名称,应用 ID(ID系统会随机为你分配一个唯一的值);
第 2 步:创建成功得到一个对应的 project number;
第 3 步:点击左侧 Credentials —create service key,得到 API key。

三、清单文件配置
 

<!--第 1 步:在清单文件中配置gcm权限等信息-->
  <uses-permission android:name="android.permission.Internet" /> 
  <uses-permission android:name="android.permission.GET_ACCOUNTS" />//当GCM需要谷歌账户(设备版本低于4.0.4时需要) 
  <uses-permission android:name="android.permission.WAKE_LOCK" /> 
  <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> 
  <permission android:name="com.example.gcmpushdemo.permission.C2D_message" 
      android:protectionLevel="signature" /> 
  <uses-permission android:name="com.example.gcmpushdemo.permission.C2D_MESSAGE" /> 
  <!--注意:applicationpackage要改成自己的包名,android:minSdkversion="8"不得低于8-->
 <!--第 2 步:在清单文件中注册系统广播receiver-->
 <application>
     ...
   <receiver 
       android:name="com.hyphenate.chat.EMGCMBroadcastReceiver"
       android:exported="true"
       android:permission="com.google.android.c2dm.permission.SEND"> 
       <intent-filter>
             <!--用于接收token-->
             <action android:name="com.huawei.android.push.intent.REGISTRATION"/>
             <!--用于接收消息-->
             <action android:name="com.google.android.c2dm.intent.RECEIVE" /> 
              <category android:name="com.example.gcmpushdemo" /> 
       </intent-filter> 
   </receiver>
   
   <!--第 3 步:在清单文件中注册监听通知服务Service-->
    <service 
        android:name="com.example.gcmpushdemo.MyGcmListenerService" 
        android:exported="false" > 
        <intent-filter> 
             action android:name="com.google.android.c2dm.intent.RECEIVE" /> 
        </intent-filter> 
     </service> 
 
   <service
        android:name="com.example.gcmpushdemo.MyInstanceIDListenerService" 
        android:exported="false"> 
        <intent-filter> 
            <action android:name="com.google.android.gms.iid.InstanceID"/> 
        </intent-filter> 
    </service>
        ...
  </application>

四、代码配置

 

//第 1 步: 在初始化 SDK 前,把project number设置到 options 里
  options.setGCMNumber(projectNumber);
  //第二步:Android 发消息
public void sendNotification(Context context, String message, boolean isForeground) {
     if (notificationManager == null) {
            notificationManager = (NotificationManager) context
           .getsystemService(Context.NOTIFICATION_SERVICE);
  }
  try {
          PackageManager packageManager = context.getPackageManager();
         // notification titile
         String contentTitle = (String) packageManager
        .getApplicationLabel(context.getApplicationInfo());
       String packageName = context.getApplicationInfo().packageName;
      Uri defaultSoundUrlUri = RingtoneManager
     .getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
    // create and send notificaiton
     NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(
           context)
     .setSmallIcon(context.getApplicationInfo().icon)
     .setSound(defaultSoundUrlUri)
     .setWhen(System.currentTimeMillis()).setAutoCancel(true);
   Intent msgIntent = context.getPackageManager()
     .getLaunchIntentForPackage(packageName);
   PendingIntent pendingIntent = PendingIntent.getActivity(context,
     notifyID, msgIntent, PendingIntent.FLAG_update_CURRENT);
   mBuilder.setContentTitle(contentTitle);
   mBuilder.setTicker(message);
   mBuilder.setContentText(message);
   mBuilder.setContentIntent(pendingIntent);
   Notification notification = mBuilder.build();
   notificationManager.notify(notifyID, notification);
  } catch (Exception e) {
   e.printStackTrace();
  }
 }
  //退出登录时解绑设备 token
  EMClient.getInstance().logout(true,callback);
  

 

赞 (0) 评论 分享 ()