OneSignal 从 android 获取用户 ID
OneSignal get User Id from android
我正在尝试实施 OneSignal Android sdk。一切正常,除了 get userId
在 OneSignal 文档中,here 有文档。
步骤是:
defaultConfig {
applicationId "com.nuspay.onesignaldemo"
manifestPlaceholders = [manifestApplicationId: "${applicationId}",
onesignal_app_id: "OPEN_SIGNAL_ID",
onesignal_google_project_number: "GOOGLE_PLAY_PROJECT_NUMBER"]
minSdkVersion 17
targetSdkVersion 23
versionCode 1
versionName "1.0"
}
并添加此 gradle 文件作为依赖项:
compile 'com.onesignal:OneSignal:2.+@aar'
compile 'com.google.android.gms:play-services-gcm:+'
compile 'com.google.android.gms:play-services-analytics:+'
compile "com.google.android.gms:play-services-location:+"
在menifest.xml中添加应用程序class和此权限
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
申请Class是这样的:
public class DemoApplication extends Application{
public static final String TAG = DemoApplication.class.getSimpleName();
private static DemoApplication instace;
@Override
public void onCreate() {
super.onCreate();
instace=this;
initialization();
}
private void initialization() {
OneSignal.startInit(this)
.setAutoPromptLocation(true)
.setNotificationOpenedHandler(new ExampleNotificationOpenedHandler()).
init();
OneSignal.idsAvailable(new OneSignal.IdsAvailableHandler() {
@Override
public void idsAvailable(String userId, String registrationId) {
Log.d("debug", "User:" + userId);
if (registrationId != null)
Log.d("debug", "registrationId:" + registrationId);
}
});
OneSignal.enableNotificationsWhenActive(true);
OneSignal.enableInAppAlertNotification(true);
OneSignal.promptLocation();
}
}
ExampleNotificationOpenedHandler
是这样的:
public class ExampleNotificationOpenedHandler implements OneSignal.NotificationOpenedHandler {
@Override
public void notificationOpened(String message, JSONObject additionalData, boolean isActive) {
try {
Log.d("HWT","Message-->"+message);
Log.d("HWT","additionalData-->"+additionalData);
Log.d("HWT","isActive-->"+isActive);
if (additionalData != null) {
if (additionalData.has("actionSelected"))
Log.d("HWT", "OneSignal notification button with id " + additionalData.getString("actionSelected") + " pressed");
Log.d("OneSignalExample", "Full additionalData:\n" + additionalData.toString());
}
} catch (Throwable t) {
t.printStackTrace();
}
}
}
现在在我的 Activity
onCreate
回调中使用以下代码获取 userId。
OneSignal.idsAvailable(new OneSignal.IdsAvailableHandler() {
@Override
public void idsAvailable(String userId, String registrationId) {
String text = "OneSignal UserID:\n" + userId + "\n\n";
}
});
我的问题是 idsAvailable
从未调用回调。
备注:
- 我设置GCM权限,获取工程号,设置Open signal工程都ok
能否请您指出我的缺点。提前致谢。
最后,我通过从应用程序 class:
中删除以下行解决了这个问题
OneSignal.enableNotificationsWhenActive(true);
OneSignal.enableInAppAlertNotification(true);
OneSignal.promptLocation();
我正在尝试实施 OneSignal Android sdk。一切正常,除了 get userId
在 OneSignal 文档中,here 有文档。
步骤是:
defaultConfig {
applicationId "com.nuspay.onesignaldemo"
manifestPlaceholders = [manifestApplicationId: "${applicationId}",
onesignal_app_id: "OPEN_SIGNAL_ID",
onesignal_google_project_number: "GOOGLE_PLAY_PROJECT_NUMBER"]
minSdkVersion 17
targetSdkVersion 23
versionCode 1
versionName "1.0"
}
并添加此 gradle 文件作为依赖项:
compile 'com.onesignal:OneSignal:2.+@aar'
compile 'com.google.android.gms:play-services-gcm:+'
compile 'com.google.android.gms:play-services-analytics:+'
compile "com.google.android.gms:play-services-location:+"
在menifest.xml中添加应用程序class和此权限
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
申请Class是这样的:
public class DemoApplication extends Application{
public static final String TAG = DemoApplication.class.getSimpleName();
private static DemoApplication instace;
@Override
public void onCreate() {
super.onCreate();
instace=this;
initialization();
}
private void initialization() {
OneSignal.startInit(this)
.setAutoPromptLocation(true)
.setNotificationOpenedHandler(new ExampleNotificationOpenedHandler()).
init();
OneSignal.idsAvailable(new OneSignal.IdsAvailableHandler() {
@Override
public void idsAvailable(String userId, String registrationId) {
Log.d("debug", "User:" + userId);
if (registrationId != null)
Log.d("debug", "registrationId:" + registrationId);
}
});
OneSignal.enableNotificationsWhenActive(true);
OneSignal.enableInAppAlertNotification(true);
OneSignal.promptLocation();
}
}
ExampleNotificationOpenedHandler
是这样的:
public class ExampleNotificationOpenedHandler implements OneSignal.NotificationOpenedHandler {
@Override
public void notificationOpened(String message, JSONObject additionalData, boolean isActive) {
try {
Log.d("HWT","Message-->"+message);
Log.d("HWT","additionalData-->"+additionalData);
Log.d("HWT","isActive-->"+isActive);
if (additionalData != null) {
if (additionalData.has("actionSelected"))
Log.d("HWT", "OneSignal notification button with id " + additionalData.getString("actionSelected") + " pressed");
Log.d("OneSignalExample", "Full additionalData:\n" + additionalData.toString());
}
} catch (Throwable t) {
t.printStackTrace();
}
}
}
现在在我的 Activity
onCreate
回调中使用以下代码获取 userId。
OneSignal.idsAvailable(new OneSignal.IdsAvailableHandler() {
@Override
public void idsAvailable(String userId, String registrationId) {
String text = "OneSignal UserID:\n" + userId + "\n\n";
}
});
我的问题是 idsAvailable
从未调用回调。
备注:
- 我设置GCM权限,获取工程号,设置Open signal工程都ok
能否请您指出我的缺点。提前致谢。
最后,我通过从应用程序 class:
中删除以下行解决了这个问题OneSignal.enableNotificationsWhenActive(true);
OneSignal.enableInAppAlertNotification(true);
OneSignal.promptLocation();