APP推送的实现-----极光推送

来源:互联网 发布:兼职淘宝新媒体编辑 编辑:程序博客网 时间:2024/05/01 23:32

一.在极光推送的官网上注册一个账号

二.打开文档
















三.打开androidSDK集成指南

















四.下载SDK下载页面



















五.Android---SDK下载














六.解压SDK下载的文件,按照以下图片的步骤,建立一个android项目开始操作


















七.建立一个android项目,如图所示












































八.要把libs/jpush-sdk-2.17变成奶瓶

九.在清单文件中配置以下信息

[java] view plain copy
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     package="您应用的包名"  
  4.     android:versionCode="216"  
  5.     android:versionName="2.1.6"  
  6.     >  
  7.     <uses-sdk android:minSdkVersion="9" android:targetSdkVersion="23" />  
  8.   
  9.     <!-- Required -->  
  10.     <permission android:name="您应用的包名.permission.JPUSH_MESSAGE" android:protectionLevel="signature" />  
  11.   
  12.     <!-- Required -->  
  13.     <uses-permission android:name="您应用的包名.permission.JPUSH_MESSAGE" />  
  14.     <uses-permission android:name="android.permission.RECEIVE_USER_PRESENT" />  
  15.     <uses-permission android:name="android.permission.INTERNET" />  
  16.     <uses-permission android:name="android.permission.WAKE_LOCK" />  
  17.     <uses-permission android:name="android.permission.READ_PHONE_STATE" />  
  18.     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />  
  19.     <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />  
  20.     <uses-permission android:name="android.permission.VIBRATE" />  
  21.     <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />  
  22.     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />  
  23.     <uses-permission android:name="android.permission.WRITE_SETTINGS" />   
  24.   
  25.     <!-- Optional. Required for location feature -->  
  26.     <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />  
  27.     <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />  
  28.     <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />  
  29.     <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />  
  30.     <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />  
  31.     <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />  
  32.   
  33.     <application  
  34.         android:icon="@drawable/ic_launcher"  
  35.         android:label="@string/app_name"  
  36.         android:name="Your Application">  
  37.   
  38.         <!-- Required SDK 核心功能-->  
  39.         <!-- option since 2.0.5 可配置PushService,DaemonService,PushReceiver,AlarmReceiver的android:process参数 将JPush相关组件设置为一个独立进程 -->  
  40.         <!-- 如:android:process=":remote" -->  
  41.         <service  
  42.             android:name="cn.jpush.android.service.PushService"  
  43.             android:enabled="true"  
  44.             android:exported="false" >  
  45.             <intent-filter>  
  46.                 <action android:name="cn.jpush.android.intent.REGISTER" />  
  47.                 <action android:name="cn.jpush.android.intent.REPORT" />  
  48.                 <action android:name="cn.jpush.android.intent.PushService" />  
  49.                 <action android:name="cn.jpush.android.intent.PUSH_TIME" />  
  50.             </intent-filter>  
  51.         </service>  
  52.   
  53.         <!-- since 1.8.0 option 可选项。用于同一设备中不同应用的JPush服务相互拉起的功能。 -->  
  54.         <!-- 若不启用该功能可删除该组件,将不拉起其他应用也不能被其他应用拉起 -->  
  55.          <service  
  56.              android:name="cn.jpush.android.service.DaemonService"  
  57.              android:enabled="true"  
  58.              android:exported="true">  
  59.              <intent-filter >  
  60.                  <action android:name="cn.jpush.android.intent.DaemonService" />  
  61.                  <category android:name="您应用的包名"/>  
  62.              </intent-filter>  
  63.          </service>  
  64.   
  65.         <!-- Required -->  
  66.         <receiver  
  67.             android:name="cn.jpush.android.service.PushReceiver"  
  68.             android:enabled="true" >  
  69.           <intent-filter android:priority="1000">   
  70.                 <action android:name="cn.jpush.android.intent.NOTIFICATION_RECEIVED_PROXY" />   
  71.                 <category android:name="您应用的包名"/>   
  72.             </intent-filter>  
  73.             <intent-filter>  
  74.                 <action android:name="android.intent.action.USER_PRESENT" />  
  75.                 <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />  
  76.             </intent-filter>  
  77.             <!-- Optional -->  
  78.             <intent-filter>  
  79.                 <action android:name="android.intent.action.PACKAGE_ADDED" />  
  80.                 <action android:name="android.intent.action.PACKAGE_REMOVED" />  
  81.                 <data android:scheme="package" />  
  82.             </intent-filter>  
  83.         </receiver>  
  84.      <!-- Required SDK核心功能-->  
  85.         <activity  
  86.             android:name="cn.jpush.android.ui.PushActivity"  
  87.             android:configChanges="orientation|keyboardHidden"  
  88.             android:exported="false" >  
  89.             <intent-filter>  
  90.                 <action android:name="cn.jpush.android.ui.PushActivity" />  
  91.                 <category android:name="android.intent.category.DEFAULT" />  
  92.                 <category android:name="您应用的包名" />  
  93.             </intent-filter>  
  94.         </activity>  
  95.         <!-- Required SDK核心功能-->  
  96.         <service  
  97.             android:name="cn.jpush.android.service.DownloadService"  
  98.             android:enabled="true"  
  99.             android:exported="false" >  
  100.         </service>  
  101.         <!-- Required SDK核心功能-->  
  102.         <receiver android:name="cn.jpush.android.service.AlarmReceiver" />  
  103.   
  104.         <!-- User defined. 用户自定义的广播接收器-->  
  105.          <receiver  
  106.              android:name="您自己定义的Receiver"  
  107.              android:enabled="true">  
  108.              <intent-filter>  
  109.                  <!--Required 用户注册SDK的intent-->  
  110.                  <action android:name="cn.jpush.android.intent.REGISTRATION" />   
  111.                  <!--Required 用户接收SDK消息的intent-->   
  112.                  <action android:name="cn.jpush.android.intent.MESSAGE_RECEIVED" />   
  113.                  <!--Required 用户接收SDK通知栏信息的intent-->  
  114.                  <action android:name="cn.jpush.android.intent.NOTIFICATION_RECEIVED" />   
  115.                  <!--Required 用户打开自定义通知栏的intent-->  
  116.                  <action android:name="cn.jpush.android.intent.NOTIFICATION_OPENED" />   
  117.                  <!--Optional 用户接受Rich Push Javascript 回调函数的intent-->  
  118.                  <action android:name="cn.jpush.android.intent.ACTION_RICHPUSH_CALLBACK" />   
  119.                  <!-- 接收网络变化 连接/断开 since 1.6.3 -->  
  120.                  <action android:name="cn.jpush.android.intent.CONNECTION" />  
  121.                  <category android:name="您应用的包名" />  
  122.              </intent-filter>  
  123.          </receiver>  
  124.   
  125.         <!-- Required. For publish channel feature -->  
  126.         <!-- JPUSH_CHANNEL 是为了方便开发者统计APK分发渠道。-->  
  127.         <!-- 例如: -->  
  128.         <!-- 发到 Google Play 的APK可以设置为 google-play; -->  
  129.         <!-- 发到其他市场的 APK 可以设置为 xxx-market。 -->  
  130.         <!-- 目前这个渠道统计功能的报表还未开放。-->  
  131.         <meta-data android:name="JPUSH_CHANNEL" android:value="developer-default"/>  
  132.         <!-- Required. AppKey copied from Portal -->  
  133.         <meta-data android:name="JPUSH_APPKEY" android:value="Your AppKey"/>   
  134.     </application>  
  135. </manifest>  
十.把清单文件中的信息的包名,接收者的姓名receiver: android:name="com.saiermeng.tuisong.MyBroadcastReceiver",还有Your AppKey对应的名字 android:value="cbc2f7a4785adf28d30e0627" 给对应的修改过来,如下所示

[java] view plain copy
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     package="com.saiermeng.tuisong"  
  4.     android:versionCode="1"  
  5.     android:versionName="1.0" >  
  6.   
  7.     <uses-sdk  
  8.         android:minSdkVersion="8"  
  9.         android:targetSdkVersion="17" />  
  10.   
  11.     <!-- Required -->  
  12.     <permission  
  13.         android:name="com.saiermeng.tuisong.permission.JPUSH_MESSAGE"  
  14.         android:protectionLevel="signature" />  
  15.   
  16.     <!-- Required -->  
  17.     <uses-permission android:name="com.saiermeng.tuisong.permission.JPUSH_MESSAGE" />  
  18.     <uses-permission android:name="android.permission.RECEIVE_USER_PRESENT" />  
  19.     <uses-permission android:name="android.permission.INTERNET" />  
  20.     <uses-permission android:name="android.permission.WAKE_LOCK" />  
  21.     <uses-permission android:name="android.permission.READ_PHONE_STATE" />  
  22.     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />  
  23.     <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />  
  24.     <uses-permission android:name="android.permission.VIBRATE" />  
  25.     <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />  
  26.     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />  
  27.     <uses-permission android:name="android.permission.WRITE_SETTINGS" />  
  28.   
  29.     <!-- Optional. Required for location feature -->  
  30.     <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />  
  31.     <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />  
  32.     <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />  
  33.     <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />  
  34.     <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />  
  35.     <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />  
  36.   
  37.     <application  
  38.         android:name="com.saiermeng.tuisong.MyApplication"  
  39.         android:icon="@drawable/ic_launcher"  
  40.         android:label="@string/app_name" >  
  41.         <activity  
  42.             android:name="com.saiermeng.tuisong.MainActivity"  
  43.             android:label="@string/app_name" >  
  44.             <intent-filter>  
  45.                 <action android:name="android.intent.action.MAIN" />  
  46.   
  47.                 <category android:name="android.intent.category.LAUNCHER" />  
  48.             </intent-filter>  
  49.         </activity>  
  50.         <activity  
  51.             android:name="com.saiermeng.tuisong.ThisActivity"  
  52.             android:label="@string/app_name" >  
  53.         </activity>  
  54.   
  55.         <!-- Required SDK 核心功能 -->  
  56.         <!-- option since 2.0.5 可配置PushService,DaemonService,PushReceiver,AlarmReceiver的android:process参数 将JPush相关组件设置为一个独立进程 -->  
  57.         <!-- 如:android:process=":remote" -->  
  58.         <service  
  59.             android:name="cn.jpush.android.service.PushService"  
  60.             android:enabled="true"  
  61.             android:exported="false" >  
  62.             <intent-filter>  
  63.                 <action android:name="cn.jpush.android.intent.REGISTER" />  
  64.                 <action android:name="cn.jpush.android.intent.REPORT" />  
  65.                 <action android:name="cn.jpush.android.intent.PushService" />  
  66.                 <action android:name="cn.jpush.android.intent.PUSH_TIME" />  
  67.             </intent-filter>  
  68.         </service>  
  69.   
  70.         <!-- since 1.8.0 option 可选项。用于同一设备中不同应用的JPush服务相互拉起的功能。 -->  
  71.         <!-- 若不启用该功能可删除该组件,将不拉起其他应用也不能被其他应用拉起 -->  
  72.         <service  
  73.             android:name="cn.jpush.android.service.DaemonService"  
  74.             android:enabled="true"  
  75.             android:exported="true" >  
  76.             <intent-filter>  
  77.                 <action android:name="cn.jpush.android.intent.DaemonService" />  
  78.   
  79.                 <category android:name="com.saiermeng.tuisong" />  
  80.             </intent-filter>  
  81.         </service>  
  82.   
  83.         <!-- Required -->  
  84.         <receiver  
  85.             android:name="cn.jpush.android.service.PushReceiver"  
  86.             android:enabled="true" >  
  87.             <intent-filter android:priority="1000" >  
  88.                 <action android:name="cn.jpush.android.intent.NOTIFICATION_RECEIVED_PROXY" />  
  89.   
  90.                 <category android:name="com.saiermeng.tuisong" />  
  91.             </intent-filter>  
  92.             <intent-filter>  
  93.                 <action android:name="android.intent.action.USER_PRESENT" />  
  94.                 <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />  
  95.             </intent-filter>  
  96.             <!-- Optional -->  
  97.             <intent-filter>  
  98.                 <action android:name="android.intent.action.PACKAGE_ADDED" />  
  99.                 <action android:name="android.intent.action.PACKAGE_REMOVED" />  
  100.   
  101.                 <data android:scheme="package" />  
  102.             </intent-filter>  
  103.         </receiver>  
  104.         <!-- Required SDK核心功能 -->  
  105.         <activity  
  106.             android:name="cn.jpush.android.ui.PushActivity"  
  107.             android:configChanges="orientation|keyboardHidden"  
  108.             android:exported="false" >  
  109.             <intent-filter>  
  110.                 <action android:name="cn.jpush.android.ui.PushActivity" />  
  111.   
  112.                 <category android:name="android.intent.category.DEFAULT" />  
  113.                 <category android:name="com.saiermeng.tuisong" />  
  114.             </intent-filter>  
  115.         </activity>  
  116.         <!-- Required SDK核心功能 -->  
  117.         <service  
  118.             android:name="cn.jpush.android.service.DownloadService"  
  119.             android:enabled="true"  
  120.             android:exported="false" >  
  121.         </service>  
  122.         <!-- Required SDK核心功能 -->  
  123.         <receiver android:name="cn.jpush.android.service.AlarmReceiver" />  
  124.   
  125.         <!-- User defined. 用户自定义的广播接收器 -->  
  126.         <receiver  
  127.             android:name="com.saiermeng.tuisong.MyBroadcastReceiver"  
  128.             android:enabled="true" >  
  129.             <intent-filter>  
  130.   
  131.                 <!-- Required 用户注册SDK的intent -->  
  132.                 <action android:name="cn.jpush.android.intent.REGISTRATION" />  
  133.                 <!-- Required 用户接收SDK消息的intent -->  
  134.                 <action android:name="cn.jpush.android.intent.MESSAGE_RECEIVED" />  
  135.                 <!-- Required 用户接收SDK通知栏信息的intent -->  
  136.                 <action android:name="cn.jpush.android.intent.NOTIFICATION_RECEIVED" />  
  137.                 <!-- Required 用户打开自定义通知栏的intent -->  
  138.                 <action android:name="cn.jpush.android.intent.NOTIFICATION_OPENED" />  
  139.                 <!-- Optional 用户接受Rich Push Javascript 回调函数的intent -->  
  140.                 <action android:name="cn.jpush.android.intent.ACTION_RICHPUSH_CALLBACK" />  
  141.                 <!-- 接收网络变化 连接/断开 since 1.6.3 -->  
  142.                 <action android:name="cn.jpush.android.intent.CONNECTION" />  
  143.   
  144.                 <category android:name="com.saiermeng.tuisong" />  
  145.             </intent-filter>  
  146.         </receiver>  
  147.   
  148.         <!-- Required. For publish channel feature -->  
  149.         <!-- JPUSH_CHANNEL 是为了方便开发者统计APK分发渠道。 -->  
  150.         <!-- 例如: -->  
  151.         <!-- 发到 Google Play 的APK可以设置为 google-play; -->  
  152.         <!-- 发到其他市场的 APK 可以设置为 xxx-market。 -->  
  153.         <!-- 目前这个渠道统计功能的报表还未开放。 -->  
  154.         <meta-data  
  155.             android:name="JPUSH_CHANNEL"  
  156.             android:value="developer-default" />  
  157.         <!-- Required. AppKey copied from Portal -->  
  158.         <meta-data  
  159.             android:name="JPUSH_APPKEY"  
  160.             android:value="cbc2f7a4785adf28d30e0627" />  
  161.     </application>  
  162.   
  163. </manifest>  
十一.MainActivity.java

[java] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. package com.saiermeng.tuisong;  
  2.   
  3. import android.app.Activity;  
  4. import android.os.Bundle;  
  5. import android.view.Menu;  
  6.   
  7. public class MainActivity extends Activity {  
  8.   
  9.     @Override  
  10.     protected void onCreate(Bundle savedInstanceState) {  
  11.         super.onCreate(savedInstanceState);  
  12.         setContentView(R.layout.activity_main);  
  13.     }  
  14.   
  15.     @Override  
  16.     public boolean onCreateOptionsMenu(Menu menu) {  
  17.         // Inflate the menu; this adds items to the action bar if it is present.  
  18.         getMenuInflater().inflate(R.menu.main, menu);  
  19.         return true;  
  20.     }  
  21.   
  22. }  
 十二.MyApplication.java

[java] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. package com.saiermeng.tuisong;  
  2.   
  3. import cn.jpush.android.api.JPushInterface;  
  4. import android.app.Application;  
  5.   
  6. public class MyApplication extends Application {  
  7.     @Override  
  8.     public void onCreate() {  
  9.         super.onCreate();  
  10.          JPushInterface.setDebugMode(true);  
  11.          JPushInterface.init(this);  
  12.     }  
  13. }  
十三.MyBroadcastReceiver.java

[java] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. package com.saiermeng.tuisong;  
  2.   
  3. import org.json.JSONObject;  
  4. import android.app.NotificationManager;  
  5. import android.content.BroadcastReceiver;  
  6. import android.content.Context;  
  7. import android.content.Intent;  
  8. import android.os.Bundle;  
  9. import android.util.Log;  
  10. import android.widget.Toast;  
  11. import cn.jpush.android.api.JPushInterface;  
  12.   
  13.   
  14.   
  15. public class MyBroadcastReceiver extends BroadcastReceiver {  
  16.     private static final String TAG = "MyReceiver";  
  17.     private NotificationManager nm;  
  18.        
  19.     @Override  
  20.     public void onReceive(Context context, Intent intent) {  
  21.         if (null == nm) {  
  22.             nm = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);  
  23.         }  
  24.            
  25.         Bundle bundle = intent.getExtras();  
  26. //        Log.d(TAG, "onReceive - " + intent.getAction() + ", extras: " + AndroidUtil.printBundle(bundle));  
  27.            
  28.         if (JPushInterface.ACTION_REGISTRATION_ID.equals(intent.getAction())) {  
  29.             Log.d(TAG, "JPush用户注册成功");  
  30.                
  31.         } else if (JPushInterface.ACTION_MESSAGE_RECEIVED.equals(intent.getAction())) {  
  32.             Log.d(TAG, "接受到推送下来的自定义消�?");  
  33.                        
  34.         } else if (JPushInterface.ACTION_NOTIFICATION_RECEIVED.equals(intent.getAction())) {  
  35.             Log.d(TAG, "接受到推送下来的通知");  
  36.        
  37.             receivingNotification(context,bundle);  
  38.    
  39.         } else if (JPushInterface.ACTION_NOTIFICATION_OPENED.equals(intent.getAction())) {  
  40.             Log.d(TAG, "用户点击打开了�?�知");  
  41.           
  42.            openNotification(context,bundle);  
  43.    
  44.         } else {  
  45.             Log.d(TAG, "Unhandled intent - " + intent.getAction());  
  46.         }  
  47.     }  
  48.    
  49.    private void receivingNotification(Context context, Bundle bundle){  
  50.         String title = bundle.getString(JPushInterface.EXTRA_NOTIFICATION_TITLE);  
  51.         Log.d(TAG, " title : " + title);  
  52.         String message = bundle.getString(JPushInterface.EXTRA_ALERT);  
  53.         Log.d(TAG, "message : " + message);  
  54.         String extras = bundle.getString(JPushInterface.EXTRA_EXTRA);  
  55.         Log.d(TAG, "extras : " + extras);  
  56.     }   
  57.    
  58.    private void openNotification(Context context, Bundle bundle){  
  59.         String extras = bundle.getString(JPushInterface.EXTRA_EXTRA);  
  60.         String myValue = "";   
  61.         try {  
  62.             //当前的url的�?�是由,极光推�?�的服务传�?�过来的,http://www.saiermeng.com  
  63. //          {  
  64. //              url:"http://www.saiermeng.com";  
  65. //          }  
  66.             JSONObject extrasJson = new JSONObject(extras);  
  67.             myValue = extrasJson.optString("url");  
  68.               
  69.         } catch (Exception e) {  
  70.             Log.w(TAG, "Unexpected: extras is not a valid json", e);  
  71.             return;  
  72.         }  
  73.         Intent mIntent = new Intent(context, ThisActivity.class);  
  74.         mIntent.putExtra("url", myValue);  
  75.         mIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);  
  76.         context.startActivity(mIntent);  
  77.     }  
  78. }  
十四.ThisActivity.java

[java] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. package com.saiermeng.tuisong;  
  2.   
  3. import android.app.Activity;  
  4. import android.os.Bundle;  
  5. import android.widget.Toast;  
  6.   
  7. public class ThisActivity extends Activity {  
  8.     @Override  
  9.     protected void onCreate(Bundle savedInstanceState) {  
  10.         super.onCreate(savedInstanceState);  
  11.         setContentView(R.layout.thisactivity);  
  12.         //webView去展示一下  
  13.         String url = getIntent().getStringExtra("url");  
  14.         Toast.makeText(getApplicationContext(), url, 1).show();  
  15.     }  
  16. }  
0 0
原创粉丝点击