gpt4 book ai didi

android - 如何在android中使用GCM获取RegistrationID

转载 作者:IT老高 更新时间:2023-10-28 22:21:50 26 4
gpt4 key购买 nike

我正在尝试使用 GCM 在 android 中进行推送通知。我阅读了 GCM 的 Google 文档及其演示应用程序。我创建了这里提到的客户端程序http://android.amolgupta.in/。但我没有获得注册 ID。另外,我没有得到以下几点:

  1. 我是否也需要使用此服务器程序
  2. 在 Google 演示应用程序上,他们提到我需要在“samples/gcm-demo-server/WebContent/WEB-INF/classes/api.key”更改 api key ,每次创建时都需要这样做吗新项目

除了谷歌提供的以外,任何人都可以为我提供合适的项目,以便我清除我的概念。

任何帮助将不胜感激。

最佳答案

这里我已经写了一些关于如何从头开始获取 RegID 和 Notification 的步骤

  1. 在 Google Cloud 上创建/注册应用
  2. 使用开发设置 Cloud SDK
  3. 为 GCM 配置项目
  4. 获取设备注册 ID
  5. 发送推送通知
  6. 接收推送通知

您可以在这里找到完整的教程:

Getting Started with Android Push Notification : Latest Google CloudMessaging (GCM) - step by step complete tutorial

enter image description here

获取注册 ID(推送通知的设备 token )的代码 fragment 。

为 GCM 配置项目


更新 AndroidManifest 文件

要在我们的项目中启用 GCM,我们需要向 list 文件添加一些权限。转到 AndroidManifest.xml 并添加以下代码:添加权限

<uses-permission android:name="android.permission.INTERNET”/>
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.WAKE_LOCK" />

<uses-permission android:name="android.permission.VIBRATE" />

<uses-permission android:name=“.permission.RECEIVE" />
<uses-permission android:name=“<your_package_name_here>.permission.C2D_MESSAGE" />
<permission android:name=“<your_package_name_here>.permission.C2D_MESSAGE"
android:protectionLevel="signature" />

在你的应用标签中添加 GCM 广播接收器声明:

<application
<receiver
android:name=".GcmBroadcastReceiver"
android:permission="com.google.android.c2dm.permission.SEND" ]]>
<intent-filter]]>
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
<category android:name="" />
</intent-filter]]>

</receiver]]>

<application/>

添加 GCM 服务声明

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

获取注册 ID(推送通知的设备 token )

现在转到您的启动/启动 Activity

添加常量和类变量

private final static int PLAY_SERVICES_RESOLUTION_REQUEST = 9000;
public static final String EXTRA_MESSAGE = "message";
public static final String PROPERTY_REG_ID = "registration_id";
private static final String PROPERTY_APP_VERSION = "appVersion";
private final static String TAG = "LaunchActivity";
protected String SENDER_ID = "Your_sender_id";
private GoogleCloudMessaging gcm =null;
private String regid = null;
private Context context= null;

更新 OnCreate 和 OnResume 方法

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_launch);
context = getApplicationContext();
if (checkPlayServices()) {
gcm = GoogleCloudMessaging.getInstance(this);
regid = getRegistrationId(context);

if (regid.isEmpty()) {
registerInBackground();
} else {
Log.d(TAG, "No valid Google Play Services APK found.");
}
}
}

@Override
protected void onResume() {
super.onResume();
checkPlayServices();
}


// # Implement GCM Required methods(Add below methods in LaunchActivity)

private boolean checkPlayServices() {
int resultCode = GooglePlayServicesUtil.isGooglePlayServicesAvailable(this);
if (resultCode != ConnectionResult.SUCCESS) {
if (GooglePlayServicesUtil.isUserRecoverableError(resultCode)) {
GooglePlayServicesUtil.getErrorDialog(resultCode, this,
PLAY_SERVICES_RESOLUTION_REQUEST).show();
} else {
Log.d(TAG, "This device is not supported - Google Play Services.");
finish();
}
return false;
}
return true;
}

private String getRegistrationId(Context context) {
final SharedPreferences prefs = getGCMPreferences(context);
String registrationId = prefs.getString(PROPERTY_REG_ID, "");
if (registrationId.isEmpty()) {
Log.d(TAG, "Registration ID not found.");
return "";
}
int registeredVersion = prefs.getInt(PROPERTY_APP_VERSION, Integer.MIN_VALUE);
int currentVersion = getAppVersion(context);
if (registeredVersion != currentVersion) {
Log.d(TAG, "App version changed.");
return "";
}
return registrationId;
}

private SharedPreferences getGCMPreferences(Context context) {
return getSharedPreferences(LaunchActivity.class.getSimpleName(),
Context.MODE_PRIVATE);
}

private static int getAppVersion(Context context) {
try {
PackageInfo packageInfo = context.getPackageManager()
.getPackageInfo(context.getPackageName(), 0);
return packageInfo.versionCode;
} catch (NameNotFoundException e) {
throw new RuntimeException("Could not get package name: " + e);
}
}


private void registerInBackground() {
new AsyncTask() {
@Override
protected Object doInBackground(Object...params) {
String msg = "";
try {
if (gcm == null) {
gcm = GoogleCloudMessaging.getInstance(context);
}
regid = gcm.register(SENDER_ID);
Log.d(TAG, "########################################");
Log.d(TAG, "Current Device's Registration ID is: " + msg);
} catch (IOException ex) {
msg = "Error :" + ex.getMessage();
}
return null;
}
protected void onPostExecute(Object result) {
//to do here
};
}.execute(null, null, null);
}

注意:请保存REGISTRATION_KEY,这对于向GCM 发送PN 消息很重要。另请注意:此 key 对于所有设备都是唯一的,GCM 将仅通过 REGISTRATION_KEY 发送推送通知。

关于android - 如何在android中使用GCM获取RegistrationID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11516782/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com