当前位置: 首页 > 面试题库 >

如何在我自己的Android应用中添加推送通知

邴越彬
2023-03-14
问题内容

我已经Android从本教程中开发了一个推送通知应用程序:android
app中的推送通知
。当我运行应用程序时,将显示注册按钮。当我单击注册按钮,并且注册成功时,设备上会显示一条通知。

如何将其包含在自己的应用程序中?我的应用程序有一个xml解析示例应用程序。在这里,当添加任何新项目时,我希望在设备上显示(显示新订单)一条通知消息。它是在这里自动生成的。


问题答案:

我正在发布Google Cloud
Messaging的
演示应用程序。

确保您创建的演示应用程序的API级别等于或高于 具有Google API的Android OS 2.2

用户必须至少登录一个Google帐户才能使用此服务。

首先,您必须添加GCM库。

比在我命名的类上创建GCMIntentService扩展了GCMBaseIntentService的类如下:

package com.example.gcmdemo;

import android.content.Context;
import android.content.Intent;
import android.util.Log;

import com.google.android.gcm.GCMBaseIntentService;
import com.google.android.gcm.GCMConstants;

public class GCMIntentService extends GCMBaseIntentService {

     private static final String TAG = "Push Notification Demo GCMIntentService";

    @Override
    protected void onError(Context context, String errorId) {

        if(GCMConstants.ERROR_ACCOUNT_MISSING.equalsIgnoreCase(errorId)) {
            Log.v(TAG, "Error Account Missing");
        } else if(GCMConstants.ERROR_AUTHENTICATION_FAILED.equalsIgnoreCase(errorId)) {
            Log.v(TAG, "Error Authentication Failed");
        } else if(GCMConstants.ERROR_INVALID_PARAMETERS.equalsIgnoreCase(errorId)) {
            Log.v(TAG, "Error Invalid Parameters");
        } else if(GCMConstants.ERROR_INVALID_SENDER.equalsIgnoreCase(errorId)) {
            Log.v(TAG, "Error Invalid Sender");
        } else if(GCMConstants.ERROR_PHONE_REGISTRATION_ERROR.equalsIgnoreCase(errorId)) {
            Log.v(TAG, "Error Phone Registration Error");
        } else if(GCMConstants.ERROR_SERVICE_NOT_AVAILABLE.equalsIgnoreCase(errorId)) {
            Log.v(TAG, "Error Service Not Available");
        } 
    }

    @Override
    protected void onMessage(Context context, Intent intent) {

        // App Server Sends message as key value pairs 
        String value1 = intent.getStringExtra("key1");
        String value2 = intent.getStringExtra("key2");

        Log.v(TAG, "key1: "+value1 );
        Log.v(TAG, "key2: "+value2 );
    }

    @Override
    protected void onRegistered(Context context, String regId) {

        Log.v(TAG, "Successfull Registration : "+regId);
    }

    @Override
    protected void onUnregistered(Context context, String regId) {

        Log.v(TAG, "Successfully Unregistred : "+regId);
    }

    @Override
    protected String[] getSenderIds(Context context) {
        return super.getSenderIds(context);
    }

    @Override
    protected void onDeletedMessages(Context context, int total) {
        super.onDeletedMessages(context, total);
    }

    @Override
    protected boolean onRecoverableError(Context context, String errorId) {
        return super.onRecoverableError(context, errorId);
    }
}

这是在以下演示活动中应如何检查注册的方法:

package com.example.gcmdemo;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;

import com.google.android.gcm.GCMRegistrar;

public class MainActivity extends Activity {

    private static final String TAG = "Push Notification Demo Activity";
    private static final String SENDER_ID = "1069713227710";

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        GCMRegistrar.checkDevice(this);
        GCMRegistrar.checkManifest(this);
        final String regId = GCMRegistrar.getRegistrationId(this);
        if (regId.equals("")) {
          GCMRegistrar.register(this, SENDER_ID);
        } else {
          Log.v(TAG, "Already registered : "+regId);
        }
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }
}

最后是演示清单:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.gcmdemo"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="8" />

    <permission
        android:name="com.example.gcmdemo.permission.C2D_MESSAGE"
        android:protectionLevel="signature" />

    <uses-permission android:name="com.example.gcmdemo.permission.C2D_MESSAGE" />

    <!-- App receives GCM messages. -->
    <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
    <!-- GCM connects to Google Services. -->
    <uses-permission android:name="android.permission.INTERNET" />
    <!-- GCM requires a Google account. -->
    <uses-permission android:name="android.permission.GET_ACCOUNTS" />
    <!-- Keeps the processor from sleeping when a message is received. -->
    <uses-permission android:name="android.permission.WAKE_LOCK" />

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/title_activity_main" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <receiver
            android:name="com.google.android.gcm.GCMBroadcastReceiver"
            android:permission="com.google.android.c2dm.permission.SEND" >
            <intent-filter>
                <action android:name="com.google.android.c2dm.intent.RECEIVE" />
                <action android:name="com.google.android.c2dm.intent.REGISTRATION" />

                <category android:name="com.example.gcmdemo" />
            </intent-filter>
        </receiver>

        <service android:name=".GCMIntentService" />
    </application>

</manifest>

另外,您将需要此处指定的第三方服务器端脚本。



 类似资料:
  • 好的,在laravel 4中,如果我想添加自己的自定义类,例如:库\myFunction.php然后我执行以下步骤: 添加myFunctions.php到app/库/myFunctiosn.php 在app/start/global.php,在ClassLoader::addDirectory(数组(,我添加app_path()。 为了在我的刀片视图中调用它,我添加了以下代码 它是有效的。 但是如

  • JFinalConfig 是 JFinal 的核心配置,详情: https://www.jfinal.com/doc/2-1 ,其内容如下: public class DemoConfig extends JFinalConfig { public void configConstant(Constants me) {} public void configRoute(Routes

  • 问题内容: 如何使用Parse.com将推送通知发送到我的Cordova 3.5.0 Android应用程序。 大多数帖子似乎涵盖了我问题的某些方面,但没有涵盖全部范围(Parse / Android或Phonegap / Parse) 我实际上已经解决了这个问题,但由于需要使用各种零散的解决方案和论坛来找到答案,因此我将完整的解决方案放在此处,而且我认为Cordova / Phonegap和Pa

  • 有多个例子,您应该如何设置您的项目添加丰富的通知,使用‘媒体附件’技术显示图像。我读过其中的大部分,但有些东西我错过了,因为我的项目没有显示任何带有该有效负载的丰富通知(用APNS-Tool和Boodle测试): 通知是可见的,但在3D Touch上,没有额外的信息显示(如图像或修改的标题)。通知扩展断点和消息也不起作用。 下面是我的演示项目:https://github.com/gklka/ri

  • 我将rpush gem添加到我的gemfile并运行bundle install。根据文档,下一步是运行rpush init。这给了我以下错误。

  • 我是新来的< code>Android Studio,所以我不明白。我是使用< code>FCM的< code >推送通知的新手,但我没有得到解决方案。我在运行时遇到了这种错误。 我的应用程序/Gradle 这是我的项目等级 我已经更新了android studio<code>SDK</code>我这边什么都没有了,但我不知道我哪里出错了。所以请在这方面帮助我。